2011-07-07 20 views
0

difflib.context_diffメソッドは、2つの比較文字列の異なる行を示すジェネレータを返します。どのようにして結果(比較)をテキストファイルに書き込むことができますか?このサンプルコードでPythonでは、ジェネレータ(context_diff)の出力をテキストファイルに書き込むことは可能ですか?

、私は、テキストファイルの行4から最後まですべてをしたいです。

>>> s1 = ['bacon\n', 'eggs\n', 'ham\n', 'guido\n'] 
>>> s2 = ['python\n', 'eggy\n', 'hamster\n', 'guido\n'] 
>>> for line in context_diff(s1, s2, fromfile='before.py', tofile='after.py'): 
...  sys.stdout.write(line) # doctest: +NORMALIZE_WHITESPACE 
*** before.py 
--- after.py 
*************** 
*** 1,4 **** 
! bacon 
! eggs 
! ham 
    guido 
--- 1,4 ---- 
! python 
! eggy 
! hamster 
    guido 

ありがとうございます!

+3

これは、発電機やcontext_diffとは何の関係もありません。基本的に「ファイルに書き込む方法は?」 http://docs.python.org/tutorial/inputoutput.html#reading-and-writing-filesを読んでください。 –

答えて

9
with open(..., "w") as output: 
    diff = context_diff(...) 
    output.writelines(diff) 

file.writelines()ためdocumentationを参照してください。

説明:

  1. withは、コンテキストマネージャである:それはあなたが完了したら、ファイルを閉じて処理します。それは必要はありませんが、良い習慣です - あなただけのようにも

    output = open(..., "w") 
    

    を行い、その後、output.close()を呼び出すか(outputは、メモリマネージャによって収集されたとき)、Pythonはあなたのためにそれをやらせるのいずれかの可能性があります。

  2. "w"は、"r"(既定値は読み取り)ではなく、書き込みモードでファイルを開くことを意味します。あなたはここに(APPENDため+、バイナリIIRC用b)を置くことができる他のさまざまなオプションがあります。

  3. writelinesは、任意の反復可能な文字列を取り、一度に1つずつファイルオブジェクトに書き込みます。これは、反復が暗黙的であるため、for line in diff: output.write(line)と同じですが、それほどありません。

0
f = open(filepath, 'w') 
for line in context_diff(s1, s2, fromfile='before.py', tofile='after.py'): 
    f.write("%s\n" %line) 

f.close() 
関連する問題