filecmp
filecmp 是 Python 内置的模块,用于比较文件和目录。
比较文件
import filecmp
# 比较两个文件
result = filecmp.cmp('file1.txt', 'file2.txt')
print(f"文件是否相同: {result}")
# 浅比较(只比较文件属性)
result = filecmp.cmp('file1.txt', 'file2.txt', shallow=True)
print(f"文件属性是否相同: {result}")
比较目录
import filecmp
# 比较两个目录
result = filecmp.cmpfiles('dir1', 'dir2', ['file1.txt', 'file2.txt'])
print(f"匹配的文件: {result.match}")
print(f"不匹配的文件: {result.mismatch}")
print(f"错误的文件: {result.funny}")
# 比较整个目录
result = filecmp.dircmp('dir1', 'dir2')
print(f"相同的文件: {result.same_files}")
print(f"不同的文件: {result.diff_files}")
print(f"独有的文件: {result.left_only}, {result.right_only}")
详细目录比较
import filecmp
# 比较目录并打印详细报告
result = filecmp.dircmp('dir1', 'dir2')
# 打印报告
result.report()
# 打印详细报告
result.report_full_closure()
# 打印部分报告
result.report_partial_closure()
检查文件是否存在
import filecmp
import os
# 检查文件是否存在
if os.path.exists('file1.txt') and os.path.exists('file2.txt'):
result = filecmp.cmp('file1.txt', 'file2.txt')
print(f"文件是否相同: {result}")
else:
print("文件不存在")
递归比较目录
import filecmp
import os
def compare_dirs(dir1, dir2):
"""递归比较两个目录"""
result = filecmp.dircmp(dir1, dir2)
print(f"相同的文件: {result.same_files}")
print(f"不同的文件: {result.diff_files}")
print(f"dir1 独有: {result.left_only}")
print(f"dir2 独有: {result.right_only}")
# 递归比较子目录
for common_dir in result.common_dirs:
subdir1 = os.path.join(dir1, common_dir)
subdir2 = os.path.join(dir2, common_dir)
print(f"\n比较子目录: {common_dir}")
compare_dirs(subdir1, subdir2)
# 使用
compare_dirs('dir1', 'dir2')
💡 提示:filecmp 适合文件同步、备份验证、目录比较等场景。