分享

如何利用python来对比两个字符串的差异

 xiaoyimin 2019-11-24

今天来介绍如何通过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软件,结果如下图

这样的结果是不是比第一个结果更加的直观,看起来更方便 ?

著作权归作者所有

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多