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

2024-05-19 17:02:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我想将一系列dircmp report_full_disclosure()输出到一个文本文件中。但是report_full_disclosure()格式是一个文本块,它不能很好地与文件.写入(比较_object.report\u完整披露())因为文件.写入()需要一行写入文件。在

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


Tags: 文件方法文本reportobject格式报告full
2条回答

在下面提到的另一个stackoerflow线程中可以找到这个问题的答案 How to redirect 'print' output to a file using 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()

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

您可以创建dircmp.filecmp的子类,该子类接受方法reportreport_full_closure和{}(如果需要)的文件参数,在每个print ...站点写入{}。当report_*_closure递归调用时,将dest参数向下传递给递归调用。在

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

如果您的程序是单线程的,您可以临时替换系统标准输出在调用report方法之前。但是,这是一个肮脏而脆弱的方法,并且想象您的程序将永远是单线程的可能是愚蠢的。在

相关问题 更多 >