欢迎访问宙启技术站
智能推送

使用Python的filecmp模块比较两个目录的文件

发布时间:2023-12-24 08:15:52

filecmp模块是Python的标准库之一,用于比较目录或文件的内容和属性。使用filecmp模块可以方便地比较两个目录中的文件,并找出差异。

以下是一个使用filecmp模块比较两个目录的文件的示例:

import filecmp

# 比较两个目录
dir1 = '/path/to/directory1'
dir2 = '/path/to/directory2'

# 使用cmp()函数比较目录,即比较目录的文件和子目录
dir_cmp = filecmp.dircmp(dir1, dir2)

# 输出目录比较结果
print("目录 1 和目录 2 的比较结果:")
print("相同文件: ", dir_cmp.common_files)
print("不同文件: ", dir_cmp.diff_files)
print("仅存在于目录 1 的文件: ", dir_cmp.left_only)
print("仅存在于目录 2 的文件: ", dir_cmp.right_only)
print("相同的子目录: ", dir_cmp.common_dirs)
print("不同的子目录: ", dir_cmp.diff_dirs)

# 比较目录中的每个文件
for file in dir_cmp.common_files:
    file1 = dir1 + '/' + file
    file2 = dir2 + '/' + file
    # 使用cmp()函数比较文件
    if filecmp.cmp(file1, file2):
        print(f"文件 {file} 相同")
    else:
        print(f"文件 {file} 不同")

# 比较目录中的每个子目录
for sub_dir in dir_cmp.common_dirs:
    sub_dir1 = dir1 + '/' + sub_dir
    sub_dir2 = dir2 + '/' + sub_dir
    # 递归地比较子目录
    sub_dir_cmp = filecmp.dircmp(sub_dir1, sub_dir2)
    print(f"比较子目录 {sub_dir}:")
    # 输出子目录比较结果
    print("相同文件: ", sub_dir_cmp.common_files)
    print("不同文件: ", sub_dir_cmp.diff_files)
    print("仅存在于子目录 1 的文件: ", sub_dir_cmp.left_only)
    print("仅存在于子目录 2 的文件: ", sub_dir_cmp.right_only)
    print("相同的子目录: ", sub_dir_cmp.common_dirs)
    print("不同的子目录: ", sub_dir_cmp.diff_dirs)

以上代码将比较给定的两个目录dir1dir2,首先使用filecmp.dircmp()函数比较目录的内容和属性,然后打印出比较结果。接着,使用for循环遍历公共文件列表,并使用filecmp.cmp()函数比较每个文件的内容。最后,使用for循环遍历公共子目录列表,并递归地比较每个子目录。

filecmp模块还提供了其他有用的函数,如cmpfiles()函数用于比较两个目录中的特定文件列表,clear_cache()函数用于清除缓存的比较结果等。

通过使用filecmp模块,可以轻松地比较两个目录的文件,找出差异,并进行一些处理操作。