filecmp
---文件和目录比较¶
源代码: Lib/filecmp.py
这个 filecmp
模块定义用于比较文件和目录的函数,以及各种可选的时间/正确性权衡。有关比较文件的信息,请参见 difflib
模块。
这个 filecmp
模块定义以下功能:
- filecmp.cmp(f1, f2, shallow=True)¶
比较名为的文件 f1 和 f2 归来
True
如果它们看起来相等,False
否则。如果 浅的 为真,文件与
os.stat()
签名被认为是平等的。否则,将比较文件的内容。请注意,此函数没有调用任何外部程序,因此它具有可移植性和效率。
此函数将缓存用于过去的比较和结果,如果
os.stat()
文件更改信息。整个缓存可以使用clear_cache()
.
- filecmp.cmpfiles(dir1, dir2, common, shallow=True)¶
比较两个目录中的文件 dir1 和 dir2 其姓名由 常见的 .
返回三个文件名列表: 比赛 , 不匹配 , errors . 比赛 包含匹配的文件列表, 不匹配 包含不包含的名称,以及 errors 列出无法比较的文件名。文件列在 errors 如果它们不存在于某个目录中,那么用户就没有读取它们的权限,或者由于其他原因无法进行比较。
这个 浅的 参数的含义和默认值与
filecmp.cmp()
.例如,
cmpfiles('a', 'b', ['c', 'd/e'])
将比较a/c
具有b/c
和a/d/e
具有b/d/e
.'c'
和'd/e'
将在三个返回列表中的一个列表中。
- filecmp.clear_cache()¶
清除filecmp缓存。如果一个文件在被修改后被如此快速地比较,以至于它在底层文件系统的mtime解析范围内,那么这可能是有用的。
3.4 新版功能.
这个 dircmp
类¶
- class filecmp.dircmp(a, b, ignore=None, hide=None)¶
构造新的目录比较对象,以比较目录 a 和 b . 忽视 是要忽略的名称列表,默认为
filecmp.DEFAULT_IGNORES
. hide 是要隐藏的名称列表,默认为[os.curdir, os.pardir]
.这个
dircmp
类通过执行比较文件 浅的 如前所述的比较filecmp.cmp()
.这个
dircmp
类提供以下方法:- report()¶
打印(到)
sys.stdout
)比较 a 和 b .
- report_partial_closure()¶
打印比较 a 和 b 以及常见的直接子目录。
- report_full_closure()¶
打印比较 a 和 b 和公共子目录(递归)。
这个
dircmp
类提供了许多有趣的属性,这些属性可用于获取有关正在比较的目录树的各种信息位。注意通过
__getattr__()
钩子,所有属性都是延迟计算的,所以如果只使用那些轻量级的属性,就不会有速度损失。- left¶
目录 a .
- right¶
目录 b .
- left_list¶
中的文件和子目录 a 过滤 hide 和 忽视 .
- right_list¶
中的文件和子目录 b 过滤 hide 和 忽视 .
- common¶
两个目录中的文件和子目录 a 和 b .
- left_only¶
仅限中的文件和子目录 a .
- right_only¶
仅限中的文件和子目录 b .
- common_dirs¶
两个目录中的子目录 a 和 b .
- common_files¶
二者档案 a 和 b .
- same_files¶
两个文件中相同的文件 a 和 b ,使用类的文件比较运算符。
- diff_files¶
两个文件中的文件 a 和 b ,其内容根据类的文件比较运算符而不同。
- funny_files¶
两个文件中的文件 a 和 b ,但无法比较。
- subdirs¶
在中映射名称的词典
common_dirs
至dircmp
实例(如果此实例的类型为MyDirCmp,则为MyDirCmp实例,MyDirCmp的子类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)