在Python中生成漂亮的diff html

The*_*own 29 html python diff prettify

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

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

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

ton*_*nfa 29

diff_prettyHtml()DIFF匹配补丁从谷歌库.

  • 我还认为它的新家在这里:https://github.com/google/diff-match-patch (4认同)
  • 很难判断是否有一种方法可以使用 diff-match-patch 生成多行文件的良好并排差异。它似乎主要集中在字符级比较,并且行级的文档不是很好(并且示例仅在 JavaScript 中)。 (2认同)

Mic*_*lon 20

通常,如果您希望某些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)
Run Code Online (Sandbox Code Playgroud)

然后你会在添加的行上获得绿色背景,在更改的行上获得黄色,在删除时获得红色 如果我这样做,我会采取生成的HTML,提取正文,并用我自己的手写的HTML块和大量的CSS作为前缀,使其看起来很好.我也可能删除图例表并将其移到顶部或将其放在div中,以便CSS可以做到这一点.

实际上,我会认真考虑修复difflib模块(用python编写)来生成更好的HTML并将其贡献给项目.如果您有一位CSS专家来帮助您或者您自己,请考虑这样做.

  • 有人实施了您的建议(我经常发现Python就是这种情况)。HtmlDiff具有make_table()方法,该方法仅创建HTML表。因此,用户可以添加自己的CSS进行美化。与接受的答案相比,这是包含在内的(来自py 2.4)。 (2认同)

小智 5

我最近发布了一个执行此操作的 python 脚本:diff2HtmlCompare(点击链接查看屏幕截图)。在幕后,它包装了 difflib 并使用 pygments 进行语法高亮显示。