10.5. filecmp —文件和目录比较

源代码: Lib/filecmp.py


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

filecmp模块定义以下Function:

除非给出* shallow *并且为假,否则具有相同os.stat()签名的文件将被视为相等。

除非更改了它们的os.stat()签名,否则不会再次比较使用此Function比较的文件。

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

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

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

Example:

>>> import filecmp
>>> filecmp.cmp('undoc.rst', 'undoc.rst') 
True
>>> filecmp.cmp('undoc.rst', 'index.rst') 
False

10.5.1. dircmp 类

dircmp实例是使用以下构造函数构建的:

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

dircmp类提供以下方法:

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

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

这是使用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)
首页