filecmp
最近在工作中,需要比对两个文件夹内的内容,于是准备用filecmp.dircmp来比较,据api介绍,库中支持递归检查,函数为report_full_closure(self)。
但是实际测试下来,此递归函数仅支持print结果,无返回值,源码如下:
def report_full_closure(self):
self.report()
for sd in self.subdirs.values():
print()
sd.report_full_closure()
其中report方法是单层的文件夹比较,并且会给self.left_only等变量赋值,但实际上递归过程结束后,这些内部变量的值已经被覆盖,而且函数本身也没有返回值,因此若我们需要对比对结果做额外操作,需要做一些改造。
改造方案
复写递归过程。
核心思想是传入列表使其每次递归调用时都会把结果添加进列表中,递归结束后返回列表。
改造结果
def recursivelyReport(self, lo=[], ro=[], diff=[]):
self.report()
lo += (self.left + _ for _ in self.left_only)
ro += (self.right + _ for _ in self.right_only)
diff += (self.left + _ for _ in self.diff_files)
for sd in self.subdirs.values():
recursivelyReport(sd, lo, ro, diff)
else:
return lo, ro, diff
函数中lo储存left_only,ro储存right_only,diff储存diff_files,并且加上当前工作的路径。