filecmp
filecmp - 文件和目录比较
源代码:
Lib / filecmp.py
filecmp
模块定义了比较文件和目录的功能,以及各种可选的时间/正确性折衷。为了比较文件,请参阅difflib
模块。
filecmp
模块定义了以下功能:
filecmp.cmp(f1, f2[, shallow])
比较名为f1
和f2
的文件,True
如果看起来相同False
则返回,否则返回。
除非给出浅
的并且是假的,否则具有相同os.stat()
签名的文件被认为是相等的。
使用此函数比较的文件将不会再次进行比较,除非其os.stat()
签名发生更改。
请注意,此功能不会调用外部程序,因此具有可移植性和效率。
filecmp.cmpfiles(dir1, dir2, common[, shallow])
比较两个目录中的文件dir1
和dir2
,它们的名称由common指定
。
返回三个文件名列表:匹配
,不匹配
,错误
。匹配
包含匹配
的文件列表,不匹配
包含那些不匹配
的文件的名称,错误
列出无法比较的文件的名称。如果文件不存在于其中一个目录中,则文件被列为错误
,用户缺乏读取权限或者由于某些其他原因无法完成比较。
该浅
参数具有相同的含义和默认值作为filecmp.cmp()
。
例如,cmpfiles('a', 'b', ['c', 'd/e'])
将比较a/c
有b/c
和a/d/e
用b/d/e
。'c'
并且'd/e'
将分别位于三个返回的列表之一中。
例:
>>> import filecmp
>>> filecmp.cmp('undoc.rst', 'undoc.rst')
True
>>> filecmp.cmp('undoc.rst', 'index.rst')
False
1. dircmp类
dircmp
实例是使用这个构造函数构建的:
class filecmp.dircmp(a, b[, ignore[, hide]])
构造一个新的目录比较对象,比较目录a
和b
。忽略
是要忽略
的名称列表,并且默认为['RCS', 'CVS', 'tags']
。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中的
文件和子目录,通过隐藏
和忽略进行
过滤。
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
对象的字典。
以下是使用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)