
要实现一个简单的 Python 文件对比工具,我们可以通过内置的 difflib 模块来完成。它能帮助我们逐行比较两个文本文件的内容,并输出差异,适合用于检查配置文件、代码版本或日志文件的变化。
1. 使用 difflib 进行文件内容对比
difflib 是 Python 标准库中专门用于比较序列(如字符串、列表)差异的模块。我们可以用它来读取两个文件并生成可读性高的对比结果。
以下是一个基础实现:
import difflibdef 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 的格式,标出哪些行被添加、删除或修改。
立即学习“Python免费学习笔记(深入)”;
2. 输出美化:HTML 格式对比
如果想在网页中展示差异,可以使用 difflib.HtmlDiff 生成带颜色标记的 HTML 页面。
TURF(开源)权限定制管理系统(以下简称“TURF系统”),是蓝水工作室推出的一套基于软件边界设计理念研发的具有可定制性的权限管理系统。TURF系统充分考虑了易用性,将配置、设定等操作进行了图形化设计,完全在web界面实现,程序员只需在所要控制的程序中简单调用一个函数,即可实现严格的程序权限管控,管控力度除可达到文件级别外,还可达到代码级别,即可精确控制到
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 argparsedef 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 和文件操作,我们就能快速构建一个轻量但实用的文件对比工具,无需依赖外部包,适合嵌入脚本或自动化流程中。









