文件内容差异对比

通过difflib模块实现文件内容差异对比,difflib 作为 python 的标准库模块,无需安装,作用是对比文件之间的差异,且支持输出可读性较强的 HTML 文档,与 Linux 下的 diff 命令相似。我们可以使用 difflib 对比代码,配置文件的差别,在版本控制方面有奇效

这次的演示比较简单,我们来进行两个字符串的比较import difflib

textStr1 = """this module provide class and function for compute,

'include html and test file .version 7.8"""

textStr2 = """this module provide class and function for compute,

'include html and test file .version 7.9"""

text1_line = textStr1.splitlines()

print(text1_line)

这里我们定义了两个字符串,只有版本号不同,我们采用字符串提供的splitlines()函数对第一个字符串进行处理,先打印出来看看是什么:

运行结果:['this module provide class and function for compute,', " 'include html and test file .version 7.8"]

可以看出,这个函数把我们的字符串按行拆开存储在一个 list 里

我们对两个字符串都进行相同的处理:text2_line = textStr2.splitlines()

然后我们就可以进行差异比较了,我们先调用一下 difflib 提高的一个构造函数去生成一个差异比较类,方便我们的后续工作:d = difflib.Differ()

有了这个 d, 我们就可以调用里面的 compare 方法,去比较我们刚刚生成的text1_line和text2_linediff = d.compare(text1_line,text2_line)

print('\n'.join(list(diff)))

运行结果:this module provide class and function for compute,

- 'include html and test file .version 7.8

? ^

+ 'include html and test file .version 7.9

? ^

可以很明显的看到,8 和 9 的下方都出现了一个小尖角,来表明它们是不同的

应用:接收两个文件名,比对它们的差异import difflib

import sys

def readFile(f):

fileopen = open(f,'rb')

text = fileopen.read().splitlines()

re = []

for i in text:

re.append(i.decode("utf-8"))

fileopen.close()

return re

if __name__ == '__main__':

# noinspection PyBroadException

try:

textfile1 = sys.argv[1]

textfile2 = sys.argv[2]

except:

print("Error argv")

sys.exit()

text_file1 = readFile(textfile1)

text_file2 = readFile(textfile2)

d = difflib.Differ()

res = d.compare(text_file1,text_file2)

print('\n'.join(list(res)))

使用方法:

​ 将以上程序命名为main.py并保存,然后在终端中输入:python main.py [文件名1] [文件名2]

​ 扩展:使用pyinstaller将其打包为可执行文件,提高可用性

python 文件内容对比_用python进行文件比对相关推荐

  1. python实习内容过程_「Python实践」学习之路

    一.列表内容对比 方式一: import operator l1 = ['a','b','c'] l2 = ['a','d','e'] print(operator.lt(l1,l2)) 运行结果为T ...

  2. php 文件内容对比,php 比较两个文件是否相同

    -### php比较两个文件是否相同 小一点的文件直接实用内置函数就可以了 function md5_files($filename,$filename1){ $file1 = md5_file($f ...

  3. python如何读取文件内容求和_使用python对文件中的数值进行累加的实例

    问题描述: 一个文件由若干条记录组成,记录的格式为:"num1 num2",有时候,需要统计文件中num1对应的num2的总值. 处理问题的思路 用传说中的python来处理,很方 ...

  4. truncate python是删除文件内容吗_在Python中操作文件之truncate()方法的使用教程

    truncate()方法截断该文件的大小.如果可选的尺寸参数存在,该文件被截断(最多)的大小. 大小默认为当前位置.当前文件位置不改变.注意,如果一个指定的大小超过了文件的当前大小,其结果是依赖于平台 ...

  5. python 对比文件内容差异_使用Python来比较文件夹并提取差异部分

    在客户那边建库,需要把几百个G几十万个文件导入到Oracle里,好不容易导完了才发现中间缺了好几大块数据,约有四分之一吧,郁闷得很. 数据是客户从第三方买的,据客户分析是拷贝过来的时候有部分数据漏掉了 ...

  6. python 爬虫框架对比_用Python写爬虫,用什么方式、框架比较好?

    以前只写过很简单的Python爬虫,直接用内置库实现,有没有谁用Python爬过规模较大的数据,用的是什么方法? 还有,采用现有的Python爬虫框架,相比与直接使用内置库,优势在哪?因为Python ...

  7. python实习内容过程_对Python实习的简单分析,也许可以帮到你

    昨天对实习僧抓取了90条Python实习的数据,今天做一个简单的分析. 因为实习僧网站上关于Python实习岗位太少,所以以下内容进仅供娱乐. 各个地点的平均日工资,南京竟然比上海还高.回去筛选一看, ...

  8. sudo修改文件夹名字_用 Python 高效智能管理文件夹

    #「闪光时刻」主题征文 二期# 大家在写报告.写总结时,是否会先去翻一下以前写过的类似的东西?是否有看过比较好的文章,想保存时却为归类而纠结?是否电脑里的文件越来越多,想删掉一些却又舍不得?身处大数据 ...

  9. TortoiseGit 单文件版本对比_入门试炼_09

    文章目录 一.单文件版本数据模拟 二.单文件版本对比 2.1. 查询单文件提交记录 2.2. 单文件版本之间差异对比 案例场景: 依次提交5次,推送远程,同一个文件5个版本之间的相互对比 一.单文件版 ...

  10. Shell sed命令,替换文件内容、替换目录下所有文件内容、读取文件内容

    目录 替换文件内容 格式: 实例:将文件内的34:51替换为11:22 替换目录下所有文件内容 格式: 实例: 替换当前目录下内容有aaa的替换为bbb 读取文件内容 替换文件内容 格式: sed - ...

最新文章

  1. 【点播系列之一】关于阿里视频云点播解决方案,你想知道的都在这里!
  2. .Net Micro Framework研究—绘图
  3. lable标签的妙用
  4. Linux性能优化2.1 CPU性能统计信息
  5. c语言建立顺序表 存储并输出,请教数据结构课程中怎么建立顺序表,显示,输出,从头到尾详细点最好加讲解,希望大家能帮这个小忙...
  6. java strcpy,详解C语言中strcpy()函数与strncpy()函数的使用
  7. 通过NGINX location实现一个域名访问多个项目
  8. HTML5 兼容IE浏览器
  9. 区块连教程(一):前置知识-linux补充
  10. azure云数据库_如何使用SQL Data Sync同步Azure SQL数据库和本地数据库
  11. 一条能让 iPhone 崩溃的 app 通知信息
  12. 新手驾车操作指南[200P]
  13. 华三交换机链路聚合的几点思考
  14. ubuntu hashcat 安装
  15. CF赛后总结3:2021-07-22晚 HSSC21-22 div1+2 rating+219
  16. Java怎么除以2_哪个更好的选项用于将整数除以2?
  17. 遗传算法_粒子群算法优化支持向量机分类预测-附代码
  18. AP侧,BP侧如何理解?
  19. 推荐系统实战4——EasyRec 搭建DSSM召回模型实现CTR点击平台
  20. echarts折线图实现滑动平移,横坐标过多时隐藏部分横坐标,通过滑动平移显示隐藏的部分

热门文章

  1. python学生教务管理系统
  2. 【vuejs】有关UI框架“ydui”中的tabbar底部导航的应用以及tabbar切换激活状态的现实
  3. Git和SVN区别和命令
  4. nc65 树单据类型教程
  5. Qt开发的超轻量http server
  6. 准谐振器和双二阶广义积分器的共同点和不同点
  7. Android Studio之NDK开发
  8. 【Ubuntu】常用Vim插件
  9. 信号与系统学习笔记与代码实现3-周期信号的傅里叶级数表示
  10. digester java_Java-Digester:提取节点名称