如何在difflib的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()))
给我这个输出:
第二行是我想要的输出。它把差异用黄色突出显示。第三行让我觉得奇怪,因为它没有检测到一个字符的变化,而是把它显示为删除/添加。第四行和第三行一样,但整行都被标记了。
1 个回答
3
difflib的算法并不保证能产生最小的编辑序列。虽然这句话是来自SequenceMatcher
的文档,但我觉得这也适用于difflib
整体,以及特别的HTMLDiff
。
我在网上搜索“python替代difflib最小编辑”时,发现了google-diff-match-patch。如果你试试他们的Diff演示,用你的示例字符串,它会产生
虽然输出结果并不是你完全想要的,但它确实展示了找到了最小的编辑。
API文档中提到
diff_prettyHtml(diffs) => html
这个函数接收一个diff数组,并返回一个漂亮的HTML序列。这个函数主要是作为一个示例,帮助你编写自己的显示函数。
这说明查看diff_prettyHtml
的源代码可能是构建你想要的HTML表格的一个不错的起点。