33

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

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

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

4

7 回答 7

32

Google的diff-match-patch库中有diff_prettyHtml()

于 2009-10-16T08:15:22.700 回答
24

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

于 2009-10-16T16:40:35.943 回答
5

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

于 2015-04-25T16:42:34.327 回答
0

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

于 2009-10-16T07:41:41.183 回答
0

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

xmldiff似乎是一个很好的包,特别是当你有 XML/HTML 比较时。在他们的文档中阅读更多内容。

于 2018-12-24T23:15:08.750 回答
0

由于 .. 来自 google seams 的库不再有活跃的开发,我建议使用diff_py

从 github 页面:

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

于 2016-02-11T11:42:31.870 回答
-1

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


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

以下功能非常好:

  • 适用于可以“在野外”找到的格式错误的 HTML。
  • 差异在 HTML 中比 XML 树的差异更专业。更改部分文本节点不会导致更改整个节点。
  • 除了默认的视觉差异之外,HTML 源代码可以连贯地进行差异。
  • 提供易于理解的更改说明。
  • 默认 GUI 允许通过键盘快捷键和链接轻松浏览修改。
于 2009-10-20T08:58:22.570 回答