web-dev-qa-db-ja.com

Pythonでかなりdiffhtmlを生成します

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

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

Python(または外部ライブラリ)に、2セットのテキストチャンクの差分のきれいなHTMLを生成する方法はありますか?(行レベルだけでなく、内の単語/文字の変更も)ライン)

28
The Unknown

Googleの diff-match-patch ライブラリにdiff_prettyHtml()があります。

29
tonfa

一般に、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の専門家がいる場合、または自分自身である場合は、これを検討してください。

20
Michael Dillon

私は最近、これを行うpythonスクリプトを投稿しました: diff2HtmlCompare (スクリーンショットのリンクをたどります)。内部では、difflibをラップし、構文の強調表示にpygmentsを使用します。

3
wagoodman

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

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

0
yofee

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

Githubページから:

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

0
guettli

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

0
Oduvan

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


DaisyDiffJava および [〜#〜] php [〜#〜] バージョンが利用可能)はどうですか。

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

  • 「野生で」見つけることができる不適切に形成されたHTMLで動作します。
  • 差分は、XMLツリーが異なるよりもHTMLに特化しています。テキストノードの一部を変更しても、ノード全体は変更されません。
  • デフォルトの視覚的な差分に加えて、HTMLソースを一貫して差分することができます。
  • 変更の説明をわかりやすく提供します。
  • デフォルトのGUIを使用すると、キーボードショートカットとリンクを使用して変更を簡単に参照できます。
0
elhoim