filecmp —文件和目录比较

源代码: Lib/filecmp.py


filecmp模块定义了用于比较文件和目录的Function,并具有各种可选的时间/正确性折衷方案。要比较文件,另请参见difflib模块。

filecmp模块定义以下Function:

如果* shallow *为 true,则具有相同os.stat()签名的文件将被视为相等。否则,将比较文件的内容。

请注意,此函数不会调用任何外部程序,因此可移植性和效率很高。

此Function将缓存用于过去的比较和结果,如果文件的os.stat()信息发生更改,则缓存条目将无效。可以使用clear_cache()清除整个缓存。

返回三个文件名列表:* match mismatch errors 。 * match 包含匹配文件的列表, mismatch 包含不匹配的文件的名称, errors 列出无法比较的文件的名称。如果文件在一个目录中不存在,用户缺乏读取权限或由于其他原因而无法进行比较,则文件会以错误*列出。

例如,cmpfiles('a', 'b', ['c', 'd/e'])a/cb/ca/d/eb/d/e进行比较。 'c''d/e'将分别位于返回的三个列表之一中。

3.4 版的新Function。

dircmp 类

dircmp类pass进行filecmp.cmp()所述的* shallow *比较来比较文件。

dircmp类提供以下方法:

dircmp类提供了许多有趣的属性,这些属性可用于获取有关要比较的目录树的各种信息。

请注意,passgetattr()钩子,所有属性都是延迟计算的,因此,如果仅使用那些轻量级的属性,则不会影响速度。

默认情况下,dircmp忽略的目录列表。

这是使用subdirs属性以递归方式搜索两个目录以显示常见的不同文件的简化示例:

>>> from filecmp import dircmp
>>> def print_diff_files(dcmp):
...     for name in dcmp.diff_files:
...         print("diff_file %s found in %s and %s" % (name, dcmp.left,
...               dcmp.right))
...     for sub_dcmp in dcmp.subdirs.values():
...         print_diff_files(sub_dcmp)
...
>>> dcmp = dircmp('dir1', 'dir2') 
>>> print_diff_files(dcmp)
首页