Python中的文件和目录比较
Python 的标准库包含 filecmp 模块,该模块定义了用于比较文件和目录的函数。此比较除了考虑文件中的数据外,还考虑文件的属性。
本文中的示例代码使用以下文件和目录结构。
首先在当前工作目录下创建两个目录 dir1 和 dir2。它们包含以下文件。
--dir1/newfile.txt-- This is a file in dir1 --dir1/file1.txt-- Hello Python --dir1/file2.txt-- Python Standard Library --dir2/file1.txt-- Hello Python --dir2/file2.txt-- Python Library
现在让我们描述 filecmp 模块中的各种比较函数。
filecmp.cmp(f1, f2, shallow=True)
此函数比较两个文件,如果它们相同则返回 True,否则返回 False。shallow 参数默认为 True。因此,除了内容外,还考虑文件元数据进行比较。如果将 shallow 设置为 False,则仅比较内容。
根据我们的文件结构,以下代码产生如下所示的输出:
Differing files : ['file2.txt'] >>> filecmp.cmp('dir1/file1.txt', 'dir2/file1.txt') True >>> filecmp.cmp('dir1/file1.txt', 'dir2/file1.txt', shallow = False) True >>> filecmp.cmp('dir1/file2.txt', 'dir2/file2.txt') False
filecmp.cmpfiles(dir1, dir2, shallow)
此函数比较两个目录中的文件,并返回一个包含三个项目的元组。元组中的第一个项目是匹配文件的列表,第二个项目显示不匹配文件的列表,第三个项目是不匹配文件的列表。
>>> match, mismatch,errors = filecmp.cmpfiles('dir1','dir2',['file1.txt', 'file2.txt']) >>> match ['file1.txt'] >>> mismatch ['file2.txt'] >>> errors []
filecmp 模块还定义了 dircmp 类。它的对象是目录比较对象。它比较两个目录(标识为左目录和右目录)中的文件。该对象可以执行如下所述的各种方法:
filecmp.dircmp(a,b)
这是构造函数。a 和 b 是要比较的目录。默认情况下,目录中的系统文件在比较中被隐藏并忽略。
>>> result = filecmp.dircmp('dir1', 'dir2')
dircmp 类中的其他方法如下:
report()
此方法打印目录之间比较的结果。
>>> result = filecmp.dircmp('dir1', 'dir2') >>> result.report() diff dir1 dir2 Only in dir1 : ['newfile.txt'] Identical files : ['file1.txt'] Differing files : ['file2.txt']
left, right
这些属性打印 dircmp 构造函数中第一个和第二个目录的名称。
>>> result.left 'dir1' >>> result.right 'dir2'
left_list, right_list
这些属性返回两个目录中的文件列表。
>>> result.left_list ['file1.txt', 'file2.txt', 'newfile.txt'] >>> result.right_list ['file1.txt', 'file2.txt']
common, common_files, common_dirs
这些属性返回公共文件和目录、仅公共文件和仅公共目录。
>>> result.common ['file1.txt', 'file2.txt'] >>> result.common_files ['file1.txt', 'file2.txt'] >>> result.common_dirs []
same_file, diff_files
这些属性使用在 dircmp 类中定义的比较运算符返回相同文件和不同文件的列表。
>>> result.same_files ['file1.txt'] >>> result.diff_files ['file2.txt']
本文讨论了 dircmp 类、其方法以及在 filecmp 模块中定义的文件比较函数。
广告