difflib - 防止替换整行
difflib - prevent replacement of whole line
比较下面的例子使用difflib.ndiff()
from difflib import unified_diff, ndiff
print("".join(ndiff(
["aba\n"],
["abbba\n"]
)))
print("".join(ndiff(
["aba\n"],
["abbbba\n"]
)))
输出:
- aba
+ abbba
? ++
- aba
+ abbbba
第一个指出了必须添加字符的地方,而第二个基本上放弃并替换了整行。
如何打印第二张
相当于
"You need to insert 3 'b's [here]."?
第二次打印的预期输出:
- aba
+ abbbba
? +++
是否显示差异视觉高亮的判断依据是两个字符串的匹配度为0.75或更高。你的第一个例子是 0.80,你的第二个例子没有被高亮显示大约是 0.72。
没有提供调整此阈值的方法 - 但 difflib
是在纯 Python 中实现的;您可以从 Python 库中复制 difflib.py 并修改它以按照您想要的方式运行。 (至少在 Python 2.7 中,阈值接近名为 _fancy_replace
的方法的顶部。)
你也可以通过用空格填充所有字符串来伪造现有的difflib,这样它们的匹配率就会更高。例如,将 10 个空格添加到两个字符串,您可以将 aba
与 abbbbbbbbbba
进行比较,但仍然会突出显示差异。
比较下面的例子使用difflib.ndiff()
from difflib import unified_diff, ndiff
print("".join(ndiff(
["aba\n"],
["abbba\n"]
)))
print("".join(ndiff(
["aba\n"],
["abbbba\n"]
)))
输出:
- aba
+ abbba
? ++
- aba
+ abbbba
第一个指出了必须添加字符的地方,而第二个基本上放弃并替换了整行。
如何打印第二张
相当于
"You need to insert 3 'b's [here]."?
第二次打印的预期输出:
- aba
+ abbbba
? +++
是否显示差异视觉高亮的判断依据是两个字符串的匹配度为0.75或更高。你的第一个例子是 0.80,你的第二个例子没有被高亮显示大约是 0.72。
没有提供调整此阈值的方法 - 但 difflib
是在纯 Python 中实现的;您可以从 Python 库中复制 difflib.py 并修改它以按照您想要的方式运行。 (至少在 Python 2.7 中,阈值接近名为 _fancy_replace
的方法的顶部。)
你也可以通过用空格填充所有字符串来伪造现有的difflib,这样它们的匹配率就会更高。例如,将 10 个空格添加到两个字符串,您可以将 aba
与 abbbbbbbbbba
进行比较,但仍然会突出显示差异。