在Python中,是否可以将生成器(context_diff)输出写入文本文件?

时间:2011-07-07 15:42:37

标签: python generator difflib

difflib.context_diff方法返回一个生成器,显示2个比较字符串的不同行。如何将结果(比较)写入文本文件?

在这个示例代码中,我想要从第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

提前致谢!

2 个答案:

答案 0 :(得分:9)

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

请参阅file.writelines()的{​​{3}}。

说明:

  1. with是一个上下文管理器:它在您完成后处理关闭文件。这不是必要的,但是很好的做法 - 你也可以这样做

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

    然后调用output.close()或让Python为你做(当内存管理器收集output时)。

  2. "w"表示您以写入模式打开文件,而不是"r"(读取,默认值)。您可以在此处添加其他各种选项(+用于追加,b用于二进制iirc。

  3. writelines接受任何可迭代的字符串,并将它们一次一个地写入文件对象。这与for line in diff: output.write(line)相同,但更整洁,因为迭代是隐式的。

答案 1 :(得分: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()