我有两个文本块,我想比较一下,看看在Python中添加/删除/修改了哪些单词/行(类似于Wiki的Diff Output)。
我已经尝试过difflib.HtmlDiff,但它的输出不是很漂亮。
Python(或外部库)中是否有一种方法可以生成两组文本块的差异的干净外观的HTML? (不仅仅是行级别,还包括行内的字/字符修改)
答案 0 :(得分:28)
Google的diff-match-patch库中有diff_prettyHtml()
。
答案 1 :(得分:19)
通常,如果您希望某些HTML以更漂亮的方式呈现,可以通过添加CSS来实现。
例如,如果您生成如下HTML:
import difflib
import sys
fromfile = "xxx"
tofile = "zzz"
fromlines = open(fromfile, 'U').readlines()
tolines = open(tofile, 'U').readlines()
diff = difflib.HtmlDiff().make_file(fromlines,tolines,fromfile,tofile)
sys.stdout.writelines(diff)
然后你会在添加的行上获得绿色背景,在更改的行上获得黄色,在删除时获得红色。如果我这样做,我会采取生成的HTML,提取正文,并用我自己的手写的HTML块和大量的CSS前缀,使其看起来很好。我也可能删除图例表并将其移到顶部或将其放在div中,以便CSS可以做到这一点。
实际上,我会认真考虑修复difflib模块(用python编写)来生成更好的HTML并将其贡献给项目。如果您有一位CSS专家来帮助您或者您自己,请考虑这样做。
答案 2 :(得分:3)
我最近发布了一个执行此操作的python脚本:diff2HtmlCompare(按照链接获取屏幕截图)。在引擎盖下它包装了difflib并使用pygments进行语法高亮。
答案 3 :(得分:0)
首先尝试通过lxml.html清理HTML,然后通过difflib检查差异
答案 4 :(得分:0)
here我自己答案的副本。
以下功能非常好:
答案 5 :(得分:0)
答案 6 :(得分:0)
不仅是行级别,还包括一行中的单词/字符修改
xmldiff似乎是一个不错的解决方案,特别是当您有XML / HTML可以比较时。在他们的documentation中阅读更多内容。