33

Pythonで追加/削除/変更された単語/行を比較して確認したいテキストのチャンクが2つあります(WikiのDiff出力と同様)。

difflib.HtmlDiffを試しましたが、出力がきれいではありません。

Python(または外部ライブラリ)に、2セットのテキストチャンクの差分の見栄えの良い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ブロックをプレフィックスとして付けます。また、CSSがそれを実行できるように、凡例テーブルを削除して一番上に移動するか、divに配置します。

実際、私はdifflibモジュール(Pythonで記述されている)を修正して、より良いHTMLを生成し、プロジェクトに貢献することを真剣に検討します。CSSの専門家がいる場合、または自分自身である場合は、これを行うことを検討してください。

于 2009-10-16T16:40:35.943 に答える
5

私は最近、これを実行するPythonスクリプトdiff2HtmlCompareを投稿しました(スクリーンショットのリンクをたどってください)。内部では、difflibをラップし、構文の強調表示にpygmentsを使用します。

于 2015-04-25T16:42:34.327 に答える
0

まず最初に、両方のHTMLをlxml.htmlでクリーンアップし、difflibで違いを確認してください。

于 2009-10-16T07:41:41.183 に答える
0

グーグルシームの..ライブラリはもう活発な開発がないので、diff_pyを使用することをお勧めします

githubページから:

Pythonで書かれたシンプルなdiffツール。差分の結果は、コンソールまたはhtmlファイルに印刷できます。

于 2016-02-11T11:42:31.870 に答える
0

行レベルだけでなく、行内の単語/文字の変更も

xmldiffは、特にXML / HTMLを比較する場合に、この目的に適したパッケージのようです。詳細については、ドキュメントをご覧ください。

于 2018-12-24T23:15:08.750 に答える
-1

ここからの私自身の答えのコピー。


DaisyDiffJavaおよびPHPバージョンが利用可能)についてはどうですか。

次の機能は本当に素晴らしいです:

  • 「野生で」見つけることができるひどく形成されたHTMLで動作します。
  • 差分は、XMLツリーが異なるよりもHTMLに特化しています。テキストノードの一部を変更しても、ノード全体が変更されることはありません。
  • デフォルトのビジュアル差分に加えて、HTMLソースをコヒーレントに差分することができます。
  • 変更の説明をわかりやすく提供します。
  • デフォルトのGUIを使用すると、キーボードショートカットとリンクを使用して変更を簡単に参照できます。
于 2009-10-20T08:58:22.570 に答える