今天来介绍如何通过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))) #打印输出结果
输出结果如下图:
![90411f62b711fcd53d90d08e61d29943.png](https://i-blog.csdnimg.cn/blog_migrate/7eca0cee9ccb5e61ab940ab66acb40f5.jpeg)
可以看到上面有很多符号:"+"、"-"、"?",下面来详细说一下每个符号代表的含义
"+"表示包含在第二个序列行中,但不包含在第一个序列行
"-"表示包含在第一个序列行中,但不包含在第二个序列行
" "表示两行一致
"?"表示两个序列行存在增量差异
"^"表示两个序列行中存在差异的字符
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软件,结果如下图
![676148eda5df2cb691e02d3dd14bc948.png](https://i-blog.csdnimg.cn/blog_migrate/a8e4e4ab804fa18d0a33aadf92205a34.jpeg)
这样的结果是不是比第一个结果更加的直观,看起来更方便 ?
到这里,对比字符串的差异模块就介绍完毕了,下一期介绍如何读取文件后,对比两个文件之间的差异。感谢您的观看。如果有问题,请私信或留言。