filecmp文件和目录比较(5)Python文件和目录访问模块(必读进阶Python教程)(参考资料)
该filecmp模块定义了比较文件和目录的功能,以及各种可选的时间/正确性权衡。有关比较文件,另请参阅difflib模块。
该filecmp模块定义了以下功能:
filecmp.cmp(f1,f2,浅= True )- 比较名为f1和f2的文件,
True如果它们看起来相等False则返回, 否则返回。如果浅,则具有相同
os.stat()签名的文件被视为相等。否则,比较文件的内容。请注意,此功能不会调用任何外部程序,从而使其具有可移植性和效率。
此函数使用缓存进行过去的比较和结果,如果
os.stat()文件的信息发生更改,则缓存条目无效。可以使用清除整个缓存clear_cache()。
filecmp.cmpfiles(dir1,dir2,common,shallow = True )- 比较两个目录中的文件dir1和dir2,其名称由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.dircmp(a,b,ignore = None,hide = None ) - 构造一个新的目录比较对象,以比较目录a 和b。 ignore是要忽略的名称列表,默认为
filecmp.DEFAULT_IGNORES。 hide是要隐藏的名称列表,默认为。[os.curdir, os.pardir]dircmp该类通过如上所述进行浅层比较来比较文件filecmp.cmp()。本
dircmp类提供了以下方法:report()- 打印(到
sys.stdout)a和b之间的比较。
report_partial_closure()- 打印之间的比较一和b,共同立即子目录。
report_full_closure()- 打印之间的比较一个和b和公共子目录(递归的)。
本
dircmp类提供了许多可用于对被比较的目录树得到的各种信息片段有趣的属性。请注意,通过
__getattr__()钩子,所有属性都是懒惰地计算的,因此如果只使用那些轻量级的属性,则不会有速度损失。left- 目录a。
right- 目录b。
left_list- 文件和子目录一,通过过滤隐藏和忽略。
right_list- b中的文件和子目录,通过hide和ignore过滤。
common- a和b中的文件和子目录。
left_only- 仅在a中的文件和子目录。
right_only- 仅在b中的文件和子目录。
common_dirs- a和b中的子目录。
common_files- a和b中的文件。
common_funny- a和b中的名称,使得目录之间的类型不同,或者
os.stat()报告错误的名称。
same_files- 使用类的文件比较运算符在a和b中相同的文件。
diff_files- 同时包含a和b的文件,其内容根据类的文件比较运算符而不同。
funny_files- 同时包含a和b的文件,但无法进行比较。
subdirs- 将字符映射
common_dirs到dircmp对象的字典。
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)