Python 文件对比工具的简单实现

要实现一个简单的 Python 文件对比工具,我们可以通过内置的 difflib 模块来完成。它能帮助我们逐行比较两个文本文件的内容,并输出差异,适合用于检查配置文件、代码版本或日志文件的变化。

1. 使用 difflib 进行文件内容对比

difflib 是 Python 标准库中专门用于比较序列(如字符串、列表)差异的模块。我们可以用它来读取两个文件并生成可读性高的对比结果。

以下是一个基础实现:

import difflib

def compare_files(file1, file2): with open(file1, 'r', encoding='utf-8') as f1, \ open(file2, 'r', encoding='utf-8') as f2: content1 = f1.readlines() content2 = f2.readlines()

# 生成差异
diff = difflib.unified_diff(
    content1, content2,
    fromfile=file1,
    tofile=file2,
    lineterm=''
)
return '\n'.join(diff)

使用示例

result = compare_files('file1.txt', 'file2.txt') print(result)

这段代码会输出类似 Git diff 的格式,标出哪些行被添加、删除或修改。

2. 输出美化:HTML 格式对比

如果想在网页中展示差异,可以使用 difflib.HtmlDiff 生成带颜色标记的 HTML 页面。

def compare_to_html(file1, file2, output_html='diff.html'):
    with open(file1, 'r', encoding='utf-8') as f1, \
         open(file2, 'r', encoding='utf-8') as f2:
        content1 = f1.readlines()
        content2 = f2.readlines()
html_diff = difflib.HtmlDiff()
html_result = html_diff.make_file(content1, content2, fromdesc=file1, todesc=file2)

with open(output_html, 'w', encoding='utf-8') as f:
    f.write(html_result)
print(f"HTML 差异已保存至 {output_html}")

调用 compare_to_html('a.txt', 'b.txt') 后,会生成一个直观的网页,绿色表示新增,红色表示删除。

3. 添加命令行支持

为了让工具更实用,可以加入命令行参数解析,方便直接运行。

import argparse

def main(): parser = argparse.ArgumentParser(description="简易文件对比工具") parser.add_argument('file1', help="第一个文件路径") parser.add_argument('file2', help="第二个文件路径") parser.add_argument('--html', nargs='?', const='diff.html', help="输出 HTML 差异文件")

args = parser.parse_args()

if args.html:
    compare_to_html(args.file1, args.file2, args.html)
else:
    result = compare_files(args.file1, args.file2)
    print(result)

if name == 'main': main()

使用方式:

  • python diff_tool.py a.txt b.txt —— 输出文本差异
  • python diff_tool.py a.txt b.txt --html —— 生成 HTML 报告
  • python diff_tool.py a.txt b.txt --html report.html —— 自定义输出文件名

基本上就这些。通过组合 difflib 和文件操作,我们就能快速构建一个轻量但实用的文件对比工具,无需依赖外部包,适合嵌入脚本或自动化流程中。