3

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 行相同,但标记了整行。

4

1 回答 1

3

difflib 的算法并不声称产生最少的编辑序列。尽管该声明来自 docs SequenceMatcher,但我怀疑它difflib普遍适用,HTMLDiff尤其适用。

在搜索“python 替代 difflib 最小编辑”时,我发现了google-diff-match-patch。如果您使用示例字符串尝试他们的 Diff 演示 ,它会产生

在此处输入图像描述

尽管输出不完全符合您的要求,但它确实表明它找到了最少的编辑。

API文档状态

diff_prettyHtml(diffs) => html

接受一个 diff 数组并返回一个漂亮的 HTML 序列。这个函数主要是作为一个例子来编写自己的显示函数。

这表明查看源代码diff_prettyHtml可能是构建您正在寻找的 HTML 表的一个很好的起点。

于 2011-10-05T15:33:25.257 回答