在Python中生成漂亮的diff html

时间:2009-10-16 06:39:20

标签: python html diff prettify

我有两个文本块,我想比较一下,看看在Python中添加/删除/修改了哪些单词/行(类似于Wiki的Diff Output)。

我已经尝试过difflib.HtmlDiff,但它的输出不是很漂亮。

Python(或外部库)中是否有一种方法可以生成两组文本块的差异的干净外观的HTML? (不仅仅是行级别,还包括行内的字/字符修改)

7 个答案:

答案 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我自己答案的副本。


DaisyDiffJavaPHP可用的部队怎么样?

以下功能非常好:

  • 使用格式错误的HTML,可以“在野外”找到。
  • HTML中的差异比XML树更加专业化。更改文本节点的一部分不会导致整个节点发生更改。
  • 除了默认的视觉差异外,还可以连贯地扩展HTML源代码。
  • 提供易于理解的更改说明。
  • 默认GUI允许通过键盘快捷键和链接轻松浏览修改。

答案 5 :(得分:0)

由于谷歌接缝的..库不再有活动开发,我建议使用diff_py

从github页面:

  

由Python编写的简单diff工具。 diff结果可以在控制台或html文件中打印。

答案 6 :(得分:0)

  

不仅是行级别,还包括一行中的单词/字符修改

xmldiff似乎是一个不错的解决方案,特别是当您有XML / HTML可以比较时。在他们的documentation中阅读更多内容。