filecmp (File & Directory Access) – Python 中文开发手册
filecmp (File & Directory Access) - Python 中文开发手册
源代码: 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)Python 中文开发手册