在Python中生成漂亮的差异HTML

问题描述 投票:0回答:7

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

我尝试过 difflib.HtmlDiff 但它的输出不太漂亮。

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

python html diff prettify
7个回答
34
投票

Google 的

diff-match-patch
库中有 diff_prettyHtml()


26
投票

通常,如果您希望某些 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 专家来帮助您或者您自己就是专家,请考虑这样做。


6
投票

我最近发布了一个 python 脚本,它就是这样做的:diff2HtmlCompare(点击链接查看屏幕截图)。在底层,它包装了 difflib 并使用 pygments 进行语法突出显示。


1
投票

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

xmldiff 似乎是一个很好的包用于此目的,特别是当您有 XML/HTML 进行比较时。请阅读他们的文档了解更多信息。


0
投票

首先尝试通过 lxml.html 清理 HTML,然后通过 difflib 检查差异


0
投票

由于 google 的 .. 库似乎不再有积极的开发,我建议使用 diff_py

来自 github 页面:

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


-2
投票

我自己的答案的副本来自这里


DaisyDiff怎么样(JavaPHP版本可用)。

以下功能非常好:

  • 适用于“在野外”发现的格式错误的 HTML。
  • HTML 中的差异比 XML 树差异更专业。更改部分文本节点不会导致整个节点更改。
  • 除了默认的视觉差异之外,还可以连贯地差异 HTML 源代码。
  • 提供易于理解的变更描述。
  • 默认 GUI 允许通过键盘快捷键和链接轻松浏览修改。
© www.soinside.com 2019 - 2024. All rights reserved.