作者:多米音乐_34067977 | 来源:互联网 | 2023-08-07 20:39
什么是difflib?用来做什么?difflib为python的标准库模块,无需安装。作用是对比文本之间的差异。并且支持输出可读性比较强的HTML文档,与Linuxshell下的d
什么是difflib? 用来做什么?
difflib为python的标准库模块,无需安装。
作用是对比文本之间的差异。
并且支持输出可读性比较强的HTML文档,与Linux shell下的diff命令相似。
在版本控制方面非常有用。
符号理解
符号 含义
'-' 包含在第一个系列行中,但不包含第二个。
'+' 包含在第二个系列行中,但不包含第一个。
' ' 两个系列行一致
'?' 存在增量差异
'^' 存在差异字符
文本对比
import difflib
#实现linux里面类似diff命令的功能
text1='''
liuchen
daiyanjing
chuanxiezi
'''
text2='''
zhoujing
budaiyanjing
chuanxiezi
'''
d = difflib.HtmlDiff()
htmlCOntent= d.make_file(text1,text2)
print(htmlContent)
发现htmlContent打印出来就是一个html的代码,为了显示出页面内容,需做如下改变:

import difflib
text1='''
liuchen
daiyanjing
chuanxiezi
'''
text2='''
zhoujing
budaiyanjing
chuanxiezi
'''
d = difflib.HtmlDiff()
htmlCOntent= d.make_file(text1,text2)
with open('diff.html','w') as f:
f.write(htmlContent)
会生成一个diff.html的文件,用浏览器打开


发现页面的显示内容十分混乱,做如下操作即可=
splitlines()按照行分割
返回一个包含各行作为元素的列表
参数: keepends=True 保留换行符
keepends=False 不包含换行符
text1='''
liuchen
daiyanjing
chuanxiezi
'''
text2='''
zhoujing
budaiyanjing
chuanxiezi
'''
t1=text1.splitlines(keepends=False)
t2=text2.splitlines(keepends=False)
d = difflib.HtmlDiff()
htmlCOntent= d.make_file(t1,t2)
with open('diff.html','w') as f:
f.write(htmlContent)

文件对比
import difflib
filename1 = '/tmp/passwd'
filename2 = '/tmp/passwd1'
with open(filename1) as f1,open(filename2) as f2:
content1 = f1.read().splitlines(keepends=True)
content2 = f2.read().splitlines(keepends=True)
d = difflib.HtmlDiff()
htmlCOntent= d.make_file(content1,content2)
with open('passwdDiff.html','w') as f:
f.write(htmlContent)