关注我们
本文内容仅供学习参考,不足错误之处,还请多多指正,如果喜欢我们,请关注我们,你的支持就是我们最大的动力。
需求来源
霍克是一名软件实施工程师,每次版本升级时,虽然会提供升级相关的清单,但不会详细说明具体的改动点。为了能够更有针对性地验证和测试系统,霍克希望对比版本升级前后的文件,了解升级前后版本的变动情况。这样他就能做到心中有数,上线时更有底气。在上线后出现问题时,也能更快速地定位问题。
此时小霍可以借助一些工具来显示对比,比如使用Beyond Compare
、Notepad++插件比对
等,但是由于版本升级的文件众多,它们不能实现批量的文件对比,因此小霍同学,需要一个方案能实现如下需求:
- 批量对比版本升级前后的文件,包括代码、脚本和数据文件等。
- 对于相同文件(
相同文件指同目录、同名,前后版本都存在
)差异部分,能明确提示出增加、删除、修改的内容 - 能够对比出前后版本,新增了哪些文件、删除了哪些文件
- 支持对目录下所有文件进行对比,包括子文件夹
实现方案
通过查询发现,Python 中difflib模块,可以实现如上需求,该库为Python 标准库,无需安装。difflib模块主要用于对比文本之间的差异,并支持输出可读性比较强的HTML文档,基于difflib模块的开发逻辑如下:
- 通过glob模块获取两个目录下的所有文件列表,包括子文件夹
- 编写
get_file_info()
方法来对获取的文件列表进行处理 - 编写
compare_file()
方法来实现单个文件对比,核心代码为difflib模块的ndiff()方法
,该方法用来比较两个字符串的内容并返回它们之间的差异 - 编写
compare_file_batch
方法来实现批量对比。
实现代码
# -*- coding: utf-8 -*-
"""
@author: MagicYang
@date: 20231117
@Tips: 关注朕大钱呀,微信公众号
@desc: 批量对比差异文件
"""
import glob, json, os, difflib
from