在线文档教程

filecmp

filecmp - 文件和目录比较

源代码: Lib / filecmp.py

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

filecmp模块定义了以下功能:

filecmp.cmp(f1, f2[, shallow])

比较名为f1f2的文件,True如果看起来相同False则返回,否则返回。

除非给出的并且是假的,否则具有相同os.stat()签名的文件被认为是相等的。

使用此函数比较的文件将不会再次进行比较,除非其os.stat()签名发生更改。

请注意,此功能不会调用外部程序,因此具有可移植性和效率。

filecmp.cmpfiles(dir1, dir2, common[, shallow])

比较两个目录中的文件dir1dir2,它们的名称由common指定

返回三个文件名列表:匹配不匹配错误匹配包含匹配的文件列表,不匹配包含那些不匹配的文件的名称,错误列出无法比较的文件的名称。如果文件不存在于其中一个目录中,则文件被列为错误,用户缺乏读取权限或者由于某些其他原因无法完成比较。

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

例如,cmpfiles('a', 'b', ['c', 'd/e'])将比较a/cb/ca/d/eb/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]])

构造一个新的目录比较对象,比较目录ab忽略是要忽略的名称列表,并且默认为['RCS', 'CVS', 'tags']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中的文件和子目录,通过隐藏忽略进行过滤。

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对象的字典。

以下是使用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)