You are here:  Home » Python » filecmp文件和目录比较(5)Python文件和目录访问模块(必读进阶Python教程)(参考资料)

filecmp模块定义了比较文件和目录的功能,以及各种可选的时间/正确性权衡。有关比较文件,另请参阅difflib模块。

filecmp模块定义了以下功能:

filecmp.cmpf1f2浅= True 
比较名为f1f2的文件,True如果它们看起来相等False则返回, 否则返回。

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

请注意,此功能不会调用任何外部程序,从而使其具有可移植性和效率。

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

filecmp.cmpfilesdir1dir2commonshallow = True 
比较两个目录中的文件dir1dir2,其名称由common给出。

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

参数具有相同的含义和默认值作为 filecmp.cmp()

例如,将比较有 和用。 并且每个都将在三个返回列表中的一个中。cmpfiles('a', 'b', ['c','d/e'])a/cb/ca/d/eb/d/e'c''d/e'

filecmp.clear_cache
清除filecmp缓存。如果文件在修改后如此快速地进行比较,使其在底层文件系统的mtime分辨率内,则这可能很有用。

版本3.4中的新功能。

dircmp

class filecmp.dircmpabignore = Nonehide = None 
构造一个新的目录比较对象,以比较目录a 和b。 ignore是要忽略的名称列表,默认为filecmp.DEFAULT_IGNORES。 hide是要隐藏的名称列表,默认为。[os.curdir, os.pardir]

dircmp该类通过如上所述进行浅层比较来比较文件filecmp.cmp()

dircmp类提供了以下方法:

report
打印(到sys.stdoutab之间比较。
report_partial_closure
打印之间的比较b,共同立即子目录。
report_full_closure
打印之间的比较一个b和公共子目录(递归的)。

dircmp类提供了许多可用于对被比较的目录树得到的各种信息片段有趣的属性。

请注意,通过__getattr__()钩子,所有属性都是懒惰地计算的,因此如果只使用那些轻量级的属性,则不会有速度损失。

left
目录a
right
目录b
left_list
文件和子目录,通过过滤隐藏忽略
right_list
b中的文件和子目录,通过hideignore过滤。
common
ab中的文件和子目录。
left_only
仅在a中的文件和子目录。
right_only
仅在b中的文件和子目录。
common_dirs
ab中的子目录。
common_files
ab中的文件。
common_funny
ab中的名称,使得目录之间的类型不同,或者os.stat()报告错误的名称。
same_files
使用类的文件比较运算符在ab中相同的文件。
diff_files
同时包含ab的文件,其内容根据类的文件比较运算符而不同。
funny_files
同时包含ab的文件,但无法进行比较。
subdirs
将字符映射common_dirsdircmp 对象的字典。
filecmp.DEFAULT_IGNORES

版本3.4中的新功能。

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)