2

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

我已经尝试遍历 report_full_disclosure() 报告,但它也不起作用。以前有没有其他人遇到过这个特殊问题?是否有不同的方法可以写入文件?

4

2 回答 2

2

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

您可以创建一个子类,dircmp.filecmp该子类接受方法的文件参数reportreport_full_closure并且report_partial_closure(如果需要)在每个print ...站点写入print >>dest, ...。在report_*_closure递归调用的地方,将dest参数传递给递归调用。

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

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

于 2014-04-30T19:11:08.093 回答
1

可以在下面提到的另一个 stackoerflow 线程中找到这个问题的答案 如何使用 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()
于 2019-01-27T13:44:35.630 回答