我有两块文本,我想比较并查看在 Python 中添加/删除/修改了哪些单词/行(类似于 Wiki 的 Diff 输出)。
我试过 difflib.HtmlDiff 但它的输出并不漂亮。
Python(或外部库)中是否有一种方法可以生成两组文本块差异的干净HTML?(不仅是行级别,还包括一行内的单词/字符修改)
Google的diff-match-patch库中有diff_prettyHtml()
。
通常,如果您希望某些 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,提取正文,并在其前面加上我自己手写的带有大量 CSS 的 HTML 块,以使其看起来不错。我也可能会删除图例表并将其移至顶部或将其放在 div 中,以便 CSS 可以做到这一点。
实际上,我会认真考虑修复 difflib 模块(它是用 python 编写的)以生成更好的 HTML 并将其回馈给项目。如果您有 CSS 专家来帮助您,或者您自己就是其中之一,请考虑这样做。
我最近发布了一个执行此操作的 python 脚本:diff2HtmlCompare(点击链接获取屏幕截图)。在引擎盖下,它包装了 difflib 并使用 pygments 进行语法高亮。
首先尝试通过 lxml.html 清理两个 HTML,然后通过 difflib 检查差异
由于 .. 来自 google seams 的库不再有活跃的开发,我建议使用diff_py
从 github 页面:
由 Python 编写的简单 diff 工具。差异结果可以打印在控制台或 html 文件中。