Python filecmp模块详解:文件与目录比较实战指南
本文详细介绍Python内置模块filecmp的使用方法,涵盖cmp函数进行单文件内容比对、cmpfiles函数批量比较指定文件以及dircmp类递归分析目录结构差异。通过具体代码示例,解析匹配、不匹配及错误文件的判定逻辑,帮助开发者高效实现文件同步与差异检测功能。
filecmp模块提供了两个核心函数,旨在简化文件与文件夹的比较操作:
filecmp.cmp(f1, f2[, shallow]):
该函数用于判断两个文件的内容是否一致。参数f1和f2分别代表待比较的两个文件路径。可选参数shallow用于控制比较时是否考量文件属性(如通过os.stat获取的属性信息)。若文件内容完全匹配,函数返回True;否则返回False。
import filecmp
s = filecmp.cmp("qin.txt", "jian.txt")
print(s)
运行结果如下:
当两个文件内容相同时返回True,内容不同时返回False。
filecmp.cmpfiles(dir1, dir2, common[, shallow]):
该函数用于比较两个指定文件夹中特定文件的一致性。参数dir1和dir2指定待比较的文件夹路径,common参数为需要比较的文件名列表。函数返回一个包含三个列表的元组,分别对应匹配文件列表、不匹配文件列表以及错误文件列表。其中,“错误文件”指代那些不存在、被锁定不可读、无读取权限或因其他原因无法访问的文件。
import filecmp
match,mismatch,errors = filecmp.cmpfiles("qin", "fu",['a.txt','b.txt'])
print("%s\n%s\n%s"%(match,mismatch,errors))
运行结果如下:
['a.txt'] -- 表示两个文件都有该文件,并且完全匹配 ['b.txt'] -- 表示两个文件都有该文件,但是不匹配 [] -- 表示没有错误的文件
filecmp模块还定义了一个dircmp类,专门用于文件夹比较。利用该类对比两个文件夹,可以获取更详细的差异信息(例如仅存在于A文件夹中的文件列表),并且支持对子文件夹进行递归比较。
dircmp类提供了三种报告比较结果的方法:
report():仅比较指定文件夹内的内容(包括文件与子文件夹); report_partial_closure():比较指定文件夹及其第一级子文件夹的内容; report_full_closure():递归比较所有层级的文件夹内容。
示例场景:在文件夹"qin"中包含文件"a.txt",在文件夹"fu"中包含文件"a.txt"和"b.txt",且两个文件夹下的文件"a.txt"内容相同,
<span style="font-size: 12px;">import filecmp
x = filecmp.dircmp("qin","fu")
diff = x.report()
print(diff)</span>
输出结果如下:
diff qin fu Only in fu: ["b.txt"] Identical files: ["qin.txt"]
若两个文件夹下的文件"a.txt"内容不同,则结果如下:
输出结果如下:
diff qin fu Only in fu: ["b.txt"] Differing files: ["a.txt"]
dircmp类还提供了以下属性,用于获取更细致的比较结果:
•left_list:左侧文件夹中的文件与文件夹列表; •right_list:右侧文件夹中的文件与文件夹列表; •common:两侧文件夹中都存在的文件或文件夹; •left_only:仅存在于左侧文件夹中的文件或文件夹; •right_only:仅存在于右侧文件夹中的文件或文件夹; •common_dirs:两侧文件夹都存在的子文件夹; •common_files:两侧文件夹都存在的子文件; •common_funny:两侧文件夹都存在的子文件夹; •same_files:匹配的文件; •diff_files:不匹配的文件; •funny_files:两侧文件夹中都存在,但无法比较的文件; •subdirs:该属性含义尚不明确,Python手册中的解释如下:A dictionary mapping names in common_dirs to dircmp objects
总结
以上所述是小编给大家介绍的通过Python模块filecmp 对文件比较的实现方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对本站网站的支持!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









