Python 使用difflib库 快速实现批量对比文件差异

关注我们

本文内容仅供学习参考,不足错误之处,还请多多指正,如果喜欢我们,请关注我们,你的支持就是我们最大的动力。

需求来源

霍克是一名软件实施工程师,每次版本升级时,虽然会提供升级相关的清单,但不会详细说明具体的改动点。为了能够更有针对性地验证和测试系统,霍克希望对比版本升级前后的文件,了解升级前后版本的变动情况。这样他就能做到心中有数,上线时更有底气。在上线后出现问题时,也能更快速地定位问题。

此时小霍可以借助一些工具来显示对比,比如使用Beyond CompareNotepad++插件比对等,但是由于版本升级的文件众多,它们不能实现批量的文件对比,因此小霍同学,需要一个方案能实现如下需求:

  1. 批量对比版本升级前后的文件,包括代码、脚本和数据文件等。
  2. 对于相同文件(相同文件指同目录、同名,前后版本都存在)差异部分,能明确提示出增加、删除、修改的内容
  3. 能够对比出前后版本,新增了哪些文件、删除了哪些文件
  4. 支持对目录下所有文件进行对比,包括子文件夹

实现方案

通过查询发现,Python 中difflib模块,可以实现如上需求,该库为Python 标准库,无需安装。difflib模块主要用于对比文本之间的差异,并支持输出可读性比较强的HTML文档,基于difflib模块的开发逻辑如下:

  1. 通过glob模块获取两个目录下的所有文件列表,包括子文件夹
  2. 编写get_file_info()方法来对获取的文件列表进行处理
  3. 编写compare_file()方法来实现单个文件对比,核心代码为difflib模块的ndiff()方法,该方法用来比较两个字符串的内容并返回它们之间的差异
  4. 编写compare_file_batch方法来实现批量对比。

实现代码

# -*- coding: utf-8 -*-
"""
@author: MagicYang
@date: 20231117
@Tips: 关注朕大钱呀,微信公众号
@desc: 批量对比差异文件
"""
import glob, json, os, difflib
from

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/157446.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

抖音订单列表查询api接口

怎么获取订单列表接口 请求地址:响应示例及参数

ArcGIS Pro 优化的热点分析【Optimized Hot Spot Analysis】

ArcGIS Pro 优化的热点分析【Optimized Hot Spot Analysis】Optimized Hot Spot Analysis 优化的热点分析https://mp.weixin.qq.com/s/lfoIls8exW5G6PPJ9gtDew em,先给大家推荐一个空间统计分析的学习资源网站 https://spatialstats-analysis-1.hub.arcgis.com/ .…

在线预览excel,luckysheet在vue项目中的使用

一. 需求 需要在内网项目中在线预览excel文档,并可以下载 二.在项目中下载并引入luckysheet 1.打开项目根目录,npm i luckyexcel 安装 npm i luckyexcel2.在项目的index.html文件中引入依赖 外网项目中的引入(CDN引入)&#…

浅谈基于云计算的环境智能监控系统

随着经济的飞速发展,环境污染也越来越严重,环境监控成为了政府与社会关注的焦点。本文提出了一种基于云计算的环境智能监控系统——EasyCVR,该系统综合应用了传感器、云计算、大数据、人工智能等技术,具有实时、准确、高效的监控能…

servlet页面以及控制台输出中文乱码

如图: servlet首页面: servlet映射页面: 以及控制台输出打印信息: 以上页面均出现中文乱码 下面依次解决: 1、首页面中文乱码 检查你的html或者jsp页面中meta字符集 如图设置成utf-8 然后重启一下tomcat 2、servl…

面试资料快速复习 Git常用命令(简单实用)

Git-command Git常用命令、面试复习、简单实用命令 ​ 一、概念理解 (一)工作区、暂存区、本地仓库、远程仓库 workspace:工作区staging area:暂存区/缓存区local repository:本地仓库remote repository&#xff…

数据治理入门

处理模式 模式名称常见场景常见框架批处理夜间几个小时,无人值守hive spark datax流处理7*24H一直运行,无人值守maxwell, flink, flume, kafka即席处理人机交互接口访问 web页面 数据治理的意义 数据质量低:数据错误,不准确或不…

【Linux专题】firewalld 过滤出接口流量

【赠送】IT技术视频教程,白拿不谢!思科、华为、红帽、数据库、云计算等等_厦门微思网络的博客-CSDN博客文章浏览阅读428次。风和日丽,小微给你送福利~如果你是小微的老粉,这里有一份粉丝福利待领取...如果你是新粉关注到了小微&am…

AODNet

【20231117】读研期间没有对阅读的文章进行总结,没想到毕业反而有了机会。即日起会对阅读过的文章要点进行梳理记录,希望这一习惯能够坚持下去。 学术的角度:看论文要学习作者如何逻辑严谨的自证 落地的角度:只用看以下六点&#…

东南亚电商平台,如何有效防范欺诈商户入驻?

目录 柬埔寨居民频遭电商欺诈 平台如何防范欺诈商家入驻 柬埔寨电信监管机构最新公布的数据显示,截至2022年1月,柬埔寨移动电话用户数量已达到19,458,849人,互联网用户数量达到1,7591,396人。这一数据表明,柬埔寨的数字化趋势日…

解锁OpenAI潜力:OpenAI 全面解析与最佳实践

该项目是由OpenAI公司提供的一个大型代码库,其中包含了各类与OpenAI API相关的代码示例和最佳实践。 此项目名为OpenAI Cookbook,目的是为了帮助使用者更有效地利用OpenAI API,将其应用于自己的工作和生活中。具体来说,可以解决一…

【MySQL】表的约束——主键、外键、唯一键,三键区别知否?

表的约束 前言正式开始空属性默认值comment列描述zerofill主键增删主键复合主键 自增长唯一键外键主键作为外键约束唯一键作为外键约束 总结 前言 我在上一篇讲完了所有的数据类型,数据类型本身也是MySQL中的一种约束,如果你对于MySQL中的数据类型不太了…

Android并发编程与多线程

一、Android线程基础 1.线程和进程 一个进程最少一个线程,进程可以包含多个线程进程在执行过程中拥有独立的内存空间,而线程运行在进程内 2.线程的创建方式 new Thread: 缺点:缺乏统一管理,可能无限制创建线程&…

多维度梳理 MySQL 锁

多维度梳理 MySQL 锁 1、并发问题的解决方案2、MySQL的各类型锁2.1、从数据操作的类型划分 (读锁、写锁)2.2、从数据操作的粒度划分2.2.1、表锁2.2.1.1、表级别的S 锁、X 锁2.2.1.2、意向锁(IS、IX)2.2.1.3、自增锁2.2.1.4、元数据锁 2.2.2、行锁2.2.2.1…

JavaScript编程基础 – 函数进阶

JavaScript编程基础 – 函数进阶 JavaScript Programming Essentials – Perfect Functions “函数的第一条原则是要小,函数的第二条原则是要更小。“ – 罗伯特.C.马丁 前文讲述过函数多取决于数学的函数概念,以此来定义JavaScript编程语言的函数&…

致远OA wpsAssistServlet 任意文件上传漏洞

声明 本文仅用于技术交流,请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。 一、产品简介 致远OA互联新一代智慧型协同运营平台以中台的架构和技术…

保护信息,守护隐私|传音第三届信息及隐私安全文化宣传月顺利开展

2023 年10月16日到11月10日,传音成功举办第三届信息及隐私安全文化宣传月活动,开展了系列知识竞赛、安全专题论坛等线上线下活动,宣传普及网络安全风险防护知识和技能,提升员工信息安全意识,构筑全方位防线。活动反响热…

docker笔记14--docker-nerdctl-crictl-ctr使用对比

docker笔记14--docker-nerdctl-crictl-ctr使用对比 介绍工具对比dockernerdctlcrictlctr 注意事项说明 介绍 随着容器云技术的成熟,越来越多的从业者开始接触、熟悉 docker和containerd 了,很多时候需要同时在 docker 和 containerd之间切换&#xff0c…

珠宝饰品展示预约小程序的效果如何

金银珠宝翡翠行业几乎每个人都会接触,比如黄金小手饰,翡翠小挂件等,当然除了购买外,还有附加服务,如珠宝鉴定、定制等,同时这个行业具有较强的到店属性,除了价值较小的配件外,真金白…