2011-07-07 75 views
0

difflib.context_diff方法返回一個生成器,向您顯示兩個比較字符串的不同行。我如何將結果(比較)寫入文本文件?在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) 

查看documentationfile.writelines()

說明:

  1. with是上下文管理器:它處理關閉文件時,你做。這是沒有必要的,但是是很好的做法 - 你也可以同樣做

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

    ,然後要麼調用output.close()或然後讓Python爲你做它(當output是由內存管理器收集)。

  2. "w"意味着您打開寫入模式文件,而不是"r"(讀,默認值)。還有其他各種可供選擇的選項(+用於追加,b用於二進制iirc)。

  3. writelines將任何字符串迭代並將它們寫入文件對象,一次一個。這與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()