Python 的 difflib 模块可以非常方便的比较两个文件的异同,并且支持将结果保存为 html 文件,html 文件中会高亮出两个文件不同的地方,非常方便。下面就简单记录下 difflib 用法。
一、difflib 介绍
difflib 是 Python 自带的一个模块,提供用于比较序列的类和函数,它可被用于比较文件,并可产生多种格式的不同文件差异信息,包括 HTML 和上下文以及统一的 diff 数据。
关于 difflib 的详细介绍可以参考 Python 官方文档:https://docs.python.org/zh-cn/3/library/difflib.html
二、difflib 实例代码
下面的代码只是 difflib 的一个用法:比较两个文件(本文中是 txt 格式),并保存为 HTML 文件)。
第一步、判断两个文件是否一样
def check_difference(file1, file2): st1 = os.stat(file1) st2 = os.stat(file2) # 比较文件大小 if st1.st_size != st2.st_size: return True buff_size = 8 * 1024 with open(file1, 'rb') as fp1, open(file2, 'rb') as fp2: while True: b1 = fp1.read(buff_size) # 读取指定大小的数据进行比较 b2 = fp2.read(buff_size) if b1 != b2: return True if not b1: return False
第二步、使用 difflib 保存差异信息
比较 file1 和 file2,并将结果保存在 key_diff.html 中:
def compare_files(key, file_path1, file_path2): out_put = key + '_diff.html' with open(file_path1, 'r') as f1, open(file_path2, 'r') as f2: l1 = f1.read().splitlines() l2 = f2.readlines() with open(os.path.join(FILE_DIR, out_put), 'w') as out_f: html_diff = difflib.HtmlDiff() diff_file = html_diff.make_file(l1, l2) out_f.write(diff_file) return out_put
结果 HTML 中会高亮两个文件的异同: