Pythonで追加/削除/変更された単語/行を比較して確認したいテキストのチャンクが2つあります(WikiのDiff出力と同様)。
difflib.HtmlDiffを試しましたが、出力がきれいではありません。
Python(または外部ライブラリ)に、2セットのテキストチャンクの差分の見栄えの良いHTMLを生成する方法はありますか?(行レベルだけでなく、行内の単語/文字の変更も)
Googleのdiff-match-patchライブラリにdiff_prettyHtml()
あります。
一般に、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の専門家がいる場合、または自分自身である場合は、これを行うことを検討してください。
私は最近、これを実行するPythonスクリプトdiff2HtmlCompareを投稿しました(スクリーンショットのリンクをたどってください)。内部では、difflibをラップし、構文の強調表示にpygmentsを使用します。
まず最初に、両方のHTMLをlxml.htmlでクリーンアップし、difflibで違いを確認してください。
グーグルシームの..ライブラリはもう活発な開発がないので、diff_pyを使用することをお勧めします
githubページから:
Pythonで書かれたシンプルなdiffツール。差分の結果は、コンソールまたはhtmlファイルに印刷できます。
ここからの私自身の答えのコピー。
DaisyDiff(JavaおよびPHPバージョンが利用可能)についてはどうですか。
次の機能は本当に素晴らしいです: