返回

用 Python 对比两个目录下的内容,轻松输出差异到 Json 文件!

见解分享

在日常开发中,我们经常需要对比不同目录下的文件差异,以便及时发现代码修改或文件更新情况。而编写一个 Python 脚本来实现此目的,不仅可以提高我们的效率,还能确保对比过程更加准确和全面。本文将深入探讨如何编写这样的脚本,并将其输出结果存储在方便查阅的 Json 文件中。

导入必要的模块

首先,我们需要导入必要的 Python 模块,包括 os 模块(用于文件和目录操作)、json 模块(用于 Json 文件处理)以及 hashlib 模块(用于计算文件哈希值)。

import os
import json
import hashlib

获取两个待对比目录

接下来,我们需要获取要对比的两个目录路径。你可以手动指定目录路径,或使用命令行参数获取。

# 获取待对比的两个目录路径
dir1 = input("请输入第一个目录路径:")
dir2 = input("请输入第二个目录路径:")

遍历目录获取文件列表

为了对比两个目录中的文件,我们需要遍历每个目录并获取其下的所有文件列表。

# 获取第一个目录下的所有文件列表
dir1_files = [os.path.join(dir1, file) for file in os.listdir(dir1)]

# 获取第二个目录下的所有文件列表
dir2_files = [os.path.join(dir2, file) for file in os.listdir(dir2)]

计算文件哈希值

为了比较两个文件是否相同,我们需要计算它们的哈希值。我们将使用 md5 哈希算法,它可以生成一个唯一的哈希值来表示文件内容。

def compute_hash(file_path):
    """计算文件的哈希值"""
    with open(file_path, "rb") as f:
        return hashlib.md5(f.read()).hexdigest()

比较文件差异

现在,我们可以比较两个目录中文件之间的差异了。我们将创建一个字典,其中键为文件名,值为一个元组,包含两个文件的哈希值和一个布尔值,表示文件内容是否相同。

# 创建一个字典来存储文件差异信息
file_diffs = {}

# 遍历第一个目录中的所有文件
for file1 in dir1_files:
    # 获取文件1的哈希值
    hash1 = compute_hash(file1)

    # 遍历第二个目录中的所有文件
    for file2 in dir2_files:
        # 获取文件2的哈希值
        hash2 = compute_hash(file2)

        # 如果文件名相同,则比较哈希值
        if os.path.basename(file1) == os.path.basename(file2):
            # 如果哈希值相同,则文件内容相同
            if hash1 == hash2:
                file_diffs[os.path.basename(file1)] = (hash1, hash2, True)
            # 否则,文件内容不同
            else:
                file_diffs[os.path.basename(file1)] = (hash1, hash2, False)

输出差异到 Json 文件

最后,我们将差异信息输出到一个 Json 文件中,以便于查阅和分析。

# 将差异信息输出到 Json 文件
with open("file_diffs.json", "w") as f:
    json.dump(file_diffs, f, indent=4)

总结

通过编写这样一个 Python 脚本,我们可以轻松对比两个目录下的文件差异,并将其输出到一个 Json 文件中。这可以大大提高我们的效率,确保文件对比过程的准确性,并便于后续的查阅和分析。