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

时间:2011-10-05 12:06:49

标签: python html difflib

我正在使用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()))

给我这个输出:

output

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

1 个答案:

答案 0 :(得分:3)

difflib的算法does not claim to yield minimal edit sequences。 虽然该声明来自SequenceMatcher的文档,但我怀疑它一般适用于difflib,特别是HTMLDiff

在谷歌上搜索“python alternative difflib minimal edit” 我找到了google-diff-match-patch。如果你试试他们的demo for Diff 使用示例字符串,它会产生

enter image description here

虽然输出并不完全符合您的要求,但它确实显示它找到了最小的编辑。

API docs

  

diff_prettyHtml(diffs)=> HTML

     

采用diff数组并返回漂亮的HTML序列。这个   函数主要用作编写自己的函数的示例   显示功能。

建议查看diff_prettyHtml的源代码可能是构建您正在寻找的HTML表的良好起点。