此模块提供用于比较序列的类和函数。 例如,它可被用于比较文件,并可产生多种格式的不同文件差异信息,包括 HTML 和上下文以及统一的 diff 数据。

安装

无需安装,python3自带

引入

import difflib

对比字符串

该逻辑使用的是Differ(),这个类的作用是比较由文本行组成的序列,并产生可供人阅读的差异或增量信息。输出的符号如下:

符号

含义

‘-’

包含在第一个系列行中,但不包含第二个

‘+’

包含在第二个系列行中,但不包含第一个

’ ’

两个系列行一致

‘?’

存在增量差异

‘^’

存在差异字符

思路:

  1. 初始化difflib.Differ()

  2. 将文章用splitlines分开

  3. 调用compare()比较,将比较结果转换成list

  4. 使用"".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的编码格式

思路:

  1. 初始化difflib.HtmlDiff()

  2. 将文章用splitlines分开

  3. 调用make_file()比较

  4. 将结果输出到文件中

文章:

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)

输出:

文章作者: Vsoapmac
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 soap的会员制餐厅
python python基础
喜欢就支持一下吧