如何将 filecmp 的 report_full_disclosure() 写入文本文件?



我想将一系列dircmp report_full_disclosure((输出到文本文件中。然而,report_full_disclosure((格式是一个文本块,它与file.write(comparison_object.report_full_displosure(不能很好地配合使用,因为file.write((需要一行写入文件。

我尝试过迭代report_full_disclosure((报告,但它也不起作用。以前有其他人遇到过这种特殊的问题吗?是否有不同的方法写入文件?

dircmp.filecmp的"报告生成"方法不接受文件对象,它们只使用print语句(或者,在Python 3版本中,使用print()函数(

您可以创建dircmp.filecmp的子类,该子类接受方法reportreport_full_closurereport_partial_closure的文件参数(如果需要(,在每个print ...站点编写print >>dest, ...。在report_*_closure递归调用的情况下,将dest参数向下传递给递归调用。

在我看来,缺乏将输出打印到特定文件的能力似乎是一种疏忽,因此,在为这些方法添加了一个可选的文件参数并对其进行了彻底测试后,您可能希望为Python项目做出贡献。

如果您的程序是单线程的,那么在调用report方法之前,您可以用目标文件临时替换sys.stdout。但这是一种肮脏而脆弱的方法,想象你的程序将永远是单线程的可能是愚蠢的。

这个问题的答案可以在下面提到的另一个stackerflow线程中找到如何重定向';打印';使用python输出到文件?基于上述线程中提供的解决方案对我有效的示例:

>>> import sys
>>> import filecmp
>>> d = dircmp('Documents/dir1','Documents/dir2')
>>> orig_stdout = sys_stdout
>>> orig_stdout = sys.stdout
>>> fo = open('list_of_diff.txt','a+')
>>> sys.stdout = fo
>>> d.report()
>>> sys.stdout = orig_stdout
>>> fo.close()

最新更新