difflib使用指南
此模块提供用于比较序列的类和函数。 例如,它可被用于比较文件,并可产生多种格式的不同文件差异信息,包括 HTML 和上下文以及统一的 diff 数据。
安装
无需安装,python3自带
引入
import difflib
对比字符串
该逻辑使用的是Differ()
,这个类的作用是比较由文本行组成的序列,并产生可供人阅读的差异或增量信息。输出的符号如下:
符号 | 含义 |
---|---|
‘-’ | 包含在第一个系列行中,但不包含第二个 |
‘+’ | 包含在第二个系列行中,但不包含第一个 |
’ ’ | 两个系列行一致 |
‘?’ | 存在增量差异 |
‘^’ | 存在差异字符 |
思路:
初始化
difflib.Differ()
将文章用
splitlines
分开调用
compare()
比较,将比较结果转换成list
使用
"".join
结果,输出
需要比较的字段:
a = """egg\ndiff\njsjs"""
b = """eggs\ndif\njson"""
逻辑:
d = difflib.Differ() # 初始化
a = a.splitlines(keepends=True) # 换行符分开a
b = b.splitlines(keepends=True) # 换行符分开b
compare = "".join(list(d.compare(a, b))) # 比较,并转换成List,然后变成字符串
print(compare) # 输出
结果:
- egg
+ eggs
? +
- diff
? -
+ dif
- jsjs+ json
生成可视化HTML
该逻辑使用的是HtmlDiff()
,并使用make_file
生成文件,形参作用如下:
fromlines
:比较的源文本tolines
:比较的对象fromdesc
:在生成的HTML中源文本的标题todesc
:在生成的HTML中对象的标题charset
:生成HTML的编码格式
思路:
初始化
difflib.HtmlDiff()
将文章用
splitlines
分开调用
make_file()
比较将结果输出到文件中
文章:
a = """Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Integer
eu lacus accumsan arcu fermentum euismod. Donec pulvinar porttitor
tellus. Aliquam venenatis. Donec facilisis pharetra tortor. In nec
mauris eget magna consequat convallis. Nam sed sem vitae odio
pellentesque interdum. Sed consequat viverra nisl. Suspendisse arcu
metus, blandit quis, rhoncus ac, pharetra eget, velit. Mauris
urna. Morbi nonummy molestie orci. Praesent nisi elit, fringilla ac,
suscipit non, tristique vel, mauris. Curabitur vel lorem id nisl porta
adipiscing. Suspendisse eu lectus. In nunc. Duis vulputate tristique
enim. Donec quis lectus a justo imperdiet tempus."""
b = """Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Integer
eu lacus accumsan arcu fermentum euismod. Donec pulvinar, porttitor
tellus. Aliquam venenatis. Donec facilisis pharetra tortor. In nec
mauris eget magna consequat convallis. Nam cras vitae mi vitae odio
pellentesque interdum. Sed consequat viverra nisl. Suspendisse arcu
metus, blandit quis, rhoncus ac, pharetra eget, velit. Mauris
urna. Morbi nonummy molestie orci. Praesent nisi elit, fringilla ac,
suscipit non, tristique vel, mauris. Curabitur vel lorem id nisl porta
adipiscing. Duis vulputate tristique enim. Donec quis lectus a justo
imperdiet tempus. Suspendisse eu lectus. In nunc. """
逻辑:
d = difflib.HtmlDiff() # 初始化
a = a.splitlines(keepends=True) # 换行符分开a
b = b.splitlines(keepends=True) # 换行符分开b
out_file = "./test.html" # 定义输出文件的路径
result = d.make_file(fromlines=a, tolines=b, fromdesc="a", todesc="b", charset="UTF-8") # 生成文件
# 写入文件
with open(out_file, 'w') as file:
file.writelines(result)
输出:
版权声明:
本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自
soap的会员制餐厅!
喜欢就支持一下吧