Python difflib的使用

今天做了一个从list的内容取出一个与指定内容尽可能相似的内容,做完之后抽个几分钟记录下

difflib的作用

比对2个文件的差异.

使用的时候直接 import difflib 即可

get_close_matches 作用

匹配最大相似的内容返回结果

list1 = ["abc", "acd", "adf", "bcd", "buff"]
str1 = "abc"
result = difflib.get_close_matches(str1, list1)
print(result)

打印结果:

['abc', 'bcd', 'acd']

difflib里面还有一些其他的函数如下

 context_diff 的作用

返回一个差异文本行,由于返回的是一个list看不到内容,下面的转成了string

import difflib

text1 = "abc"
text2 = "bcde"

res1 = difflib.context_diff(text1, text2)
print("".join(res1))

打印结果

 ndiff的作用

返回2个文件的差异点

import difflib

text1 = "abc"
text2 = "bcde"

res1 = difflib.ndiff(text1, text2)
print("".join(res1))

 可能看到- 和+ 感觉有点蒙,不用慌,他们的作用在下面

符号 含义
‘-’ 包含在第一个系列行中,但不包含第二个。
‘+’ 包含在第二个系列行中,但不包含第一个。
’ ’ 两个系列行一致。
‘?’ 存在增量差异。
‘^’ 存在差异字符。

对比这个就能明白-a 表示text1中有,text2 中没有, +d,+e 表示text2中有text1中没有

ndiff 和difflib的compare作用是一样的

 下面说下difflib.Differ()的compare方法

difflib的Differ 的使用

import difflib

text1 = "abc"
text2 = "bcde"

res1 = difflib.ndiff(text1, text2)
print("".join(res1))

d = difflib.Differ()
result = d.compare(text1, text2)
print("".join(result))

打印结果

 difflib的HtmlDiff方法

import difflib

text1 = "abc"
text2 = "bcde"

res1 = difflib.ndiff(text1, text2)
print("".join(res1))
# Differ 比较差异
d = difflib.Differ()
result = d.compare(text1, text2)
print("".join(result))
# HtmlDiff 统计差异
d1 = difflib.HtmlDiff()
res2 = d1.make_file(text1, text2)
# 把比对结果写入到html中
with open("diff.html", "w") as f:
    f.write(res2)

在代码的同目录下找到diff.html 用浏览器代码

 很明显的就能看到差异了

difflib的SequenceMatcher 方法

import difflib

text1 = "abc"
text2 = "bcde"

res1 = difflib.ndiff(text1, text2)
print("".join(res1))
# Differ 比较差异
d = difflib.Differ()
result = d.compare(text1, text2)
print("".join(result))
# HtmlDiff 统计差异
d1 = difflib.HtmlDiff()
res2 = d1.make_file(text1, text2)
# 把比对结果写入到html中
with open("diff.html", "w") as f:
    f.write(res2)
# 2个文件的相似对
res3 = difflib.SequenceMatcher(None, text1, text2).quick_ratio()
print(res3)

打印结果

猜你喜欢

转载自blog.csdn.net/qq_33210042/article/details/131007868