今天来介绍如何通过difflib模块实现字符串差异对比。Difflib的作用是对比文本之间的差异,且支持输入可读性比较强的HTML文档。下面来看一下示例。
1、 两个字符串的差异对比,代码如下:
import difflib
text1 = ''' text1:
Differ is a class for comparing sequences of lines of text,and
producing human-readble differences or deltas.
add string
print version
''' #定义字串text1
text1_lines = text1.splitlines() # 以行分隔,以便进行对比
text2 = '''text2:
differ is a class for comparing sequences of lines of text,and
producing human-readable differences or deltas.
add string
print version
''' #定义字符串2
text2_lines = text2.splitlines() # 以行分隔,以便进行对比
d = difflib.Differ() #创建differ()对象
diff = d.compare(text1_lines,text2_lines) #采用compare 方法对字符串进行比较
print (''.join(list(diff))) #打印输出结果
输出结果如下图:
可以看到上面有很多符号:'+'、'-'、'?',下面来详细说一下每个符号代表的含义
'+'表示包含在第二个序列行中,但不包含在第一个序列行
'-'表示包含在第一个序列行中,但不包含在第二个序列行
' '表示两行一致
'?'表示两个序列行存在增量差异
'^'表示两个序列行中存在差异的字符
2、 生成HTML文档格式的对比结果
我们从上面的对比结果可以看出,用各种符号来表示文档的差异,即不美观,也不方便,那我们来看看如何征收成HTML格式的对比结果,采用的是htmldiff()类的make_file方法就可以生成了。对上面的代码作如下修改:
d = difflib.Differ() #创建differ()对象
diff = d.compare(text1_lines,text2_lines) #采用compare 方法对字符串进行比较
print (''.join(list(diff))) #打印输出结果
替换为:
D = difflib.HtmlDiff()
Print (d.make_file(text1_lines,text2_lines)
完整代码如下:
import difflib
text1 = ''' text1:
Differ is a class for comparing sequences of lines of text,and
producing human-readble differences or deltas.
add string
print version
''' #定义字串text1
text1_lines = text1.splitlines() # 以行分隔,以便进行对比
text2 = '''text2:
differ is a class for comparing sequences of lines of text,and
producing human-readable differences or deltas.
add string
print version
''' #定义字符串2
text2_lines = text2.splitlines() # 以行分隔,以便进行对比
#d = difflib.Differ() #创建differ()对象
#diff = d.compare(text1_lines,text2_lines) #采用compare 方法对字符串进行比较
#print (''.join(list(diff))) #打印输出结果
d = difflib.HtmlDiff()
print (d.make_file(text1_lines,text2_lines))
另存为com.py,然后在命令行下运行python com.py > com.html
然后用浏览器打开生成的html软件,结果如下图
这样的结果是不是比第一个结果更加的直观,看起来更方便 ?
联系客服