我正在使用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行相同,但标记了整行。
答案 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 使用示例字符串,它会产生
虽然输出并不完全符合您的要求,但它确实显示它找到了最小的编辑。
diff_prettyHtml(diffs)=> HTML
采用diff数组并返回漂亮的HTML序列。这个 函数主要用作编写自己的函数的示例 显示功能。
建议查看diff_prettyHtml
的源代码可能是构建您正在寻找的HTML表的良好起点。