如何将生成器的输出写入文本文件?

Posted

技术标签:

【中文标题】如何将生成器的输出写入文本文件?【英文标题】:How do I write a generator's output to a text file? 【发布时间】:2011-07-07 15:42:37 【问题描述】:

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

提前致谢!

【问题讨论】:

这与生成器或 context_diff 无关。它基本上是“我如何写入文件?”你应该阅读docs.python.org/tutorial/… 【参考方案1】:
with open(..., "w") as output:
    diff = context_diff(...)
    output.writelines(diff)

对于file.writelines(),请参阅documentation。

解释:

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

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

    然后要么调用output.close(),要么让Python为你做这件事(当内存管理器收集到output时)。

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

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

【讨论】:

【参考方案2】:
f = open(filepath, 'w')
for line in context_diff(s1, s2, fromfile='before.py', tofile='after.py'):
    f.write("%s\n" %line)

f.close()

【讨论】:

以上是关于如何将生成器的输出写入文本文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何将“读者友好”的 sessionInfo() 写入文本文件

如何将 WebSocket 输出写入文本文件?

如何从此输出写入文本文件

如何将 websocket 推送 api 输出写入文本文件?

使用 Apache Spark 将 RDD 写入文本文件

如何用python将变量及其值写入文本文件?