3

私はdifflib.HtmlDiff2つのファイルを比較するために使用しています。出力されたhtmlで違いを強調したい。

これは、1行に最大2つの異なる文字がある場合にすでに機能します。

a = "2.000"
b = "2.120"

ただし、1行にさらに異なる文字がある場合、出力では行全体が赤(左側)または緑(表の右側)でマークされます。

a = "2.000"
b = "2.123"

この動作は構成可能ですか?それで、行が削除/追加としてマークされる異なる文字の数を設定できますか?

編集:

例:

import difflib
diff=difflib.HtmlDiff()
print(diff.make_file(
'''
2.000
2.000
2.000
'''.splitlines(),
'''
2.001
2.010
2.011
'''.splitlines()))

私にこの出力を与えます:

出力

2行目は私が欲しい出力です。黄色の違いを強調しています。3行目は、1文字の変更を検出せず、代わりに削除/追加として表示するため、私には奇妙です。4行目は3行目と同じですが、行全体がマークされています。

4

1 に答える 1

3

difflibのアルゴリズムは、最小限の編集シーケンスを生成するとは主張していません。その声明はのドキュメントから来ていますが、私はそれが一般的に、そして特にSequenceMatcher当てはまると思います。difflibHTMLDiff

「pythonalternativedifflibminimum edit」を探し回っているときに、google-diff-match-patchを見つけました。 サンプルの文字列を使用してDiffのデモを試してみると、次のようになります。

ここに画像の説明を入力してください

出力は要求したものと正確には一致しませんが、最小限の編集が見つかったことを示しています。

APIドキュメントの状態

diff_prettyHtml(diffs)=> html

diff配列を取り、きれいなHTMLシーケンスを返します。この関数は、主に独自の表示関数を作成するための例として意図されています。

これは、ソースコードをdiff_prettyHtml調べることが、探しているHTMLテーブルを作成するための良い出発点になる可能性があることを示唆しています。

于 2011-10-05T15:33:25.257 に答える