其他分享
首页 > 其他分享> > 如何在difflibs html输出中高亮显示每行两个以上的字符

如何在difflibs html输出中高亮显示每行两个以上的字符

作者:互联网

我正在使用difflib.HtmlDiff比较两个文件.我希望在输出的html中突出显示差异.

当一行中最多包含两个不同的字符时,这已经可以工作:

a = "2.000"
b = "2.120"

但是,如果一行上有更多不同的字符,则在输出中,整行将标记为红色(在左侧)或绿色(在表格的右侧):

a = "2.000"
b = "2.123"

这种行为是可配置的吗?那么我可以设置将行标记为已删除/已添加的不同字符的数量吗?

编辑:

例:

import difflib
diff=difflib.HtmlDiff()
print(diff.make_file(
'''
2.000
2.000
2.000
'''.splitlines(),
'''
2.001
2.010
2.011
'''.splitlines()))

给我这个输出:

第2行是我想要的输出.它突出显示了黄色之间的差异.
第3行对我来说很奇怪,因为它没有检测到一个字符更改,而是将其显示为删除/添加.
第4行与第3行相同,但标记了整行.

解决方法:

difflib的算法does not claim to yield minimal edit sequences.
尽管该语句来自SequenceMatcher的文档,但我怀疑它通常适用于difflib,尤其适用于HTMLDiff.

在谷歌搜索“ python替代difflib最小编辑”时
我找到了google-diff-match-patch.如果您尝试他们的demo for Diff
与您的示例字符串,它产生

尽管输出结果与您要求的不完全相同,但它确实表明已找到最少的编辑内容.

API docs状态

diff_prettyHtml(diffs) => html

Takes a diff array and returns a pretty HTML sequence. This
function is mainly intended as an example from which to write ones own
display functions.

这表明查看diff_prettyHtml的源代码可能是构建所需HTML表格的良好起点.

标签:difflib,html,python
来源: https://codeday.me/bug/20191202/2087039.html