我正在使用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表格的良好起点.