この記事では、主に Python difflib モジュールの例を詳しく紹介します。興味のある方は、シーケンスの差分比較のために
difflib モジュールが提供するクラスとメソッドを参照してください。テキストまたは HTML 形式の差分比較ページ。ディレクトリを比較する必要がある場合は、filecmp モジュールを使用できます。
クラス difflib.SequenceMatcher
このクラスは、任意のハッシュ可能な型のシーケンス ペアを比較するためのメソッドを提供します。このメソッドは、「ガベージ」要素を含まない最大の連続一致シーケンスを見つけます。
アルゴリズムの複雑さを比較すると、オリジナルのゲシュタルトマッチングアルゴリズムにより、最悪のケースではn乗演算があり、最良のケースでは線形効率が得られます。
フラグメントの 1% を超えて繰り返される文字、または 200 回繰り返される文字をガベージとして扱うことができる自動ガベージ ヒューリスティックを備えています。この機能は、autojunk を false に設定することでオフにできます。
クラス difflib.Differ
このクラスはテキスト行の差分を比較し、人間が読むのに適した差分結果または増分結果を生成します。 結果の各部分の表現は次のとおりです。 class difflib.HtmlDiff
このクラスは、比較結果を両側に表示したり、行ごとに表示したりする HTML テーブル (またはテーブルを含む HTML ファイル) を作成するために使用できます。
make_file(fromlines, tolines [, fromdesc][, todesc][, context][, numlines])make_table(fromlines, tolines [, fromdesc][, todesc][, context][, numlines])
上記 2 つの方法は両方とも、比較結果を含む表を含む HTML ファイルを生成するために使用でき、コンテンツの一部が強調表示されます。
difflib.context_diff(a, b[, fromfile][, tofile][, fromfiledate][, tofiledate][, n][, lineterm])
a と b (文字列リスト) を比較し、A ジェネレーターを返しますテキストの行間の比較用
例:>>> s1 = ['bacon\n', 'eggs\n', 'ham\n', 'guido\n'] >>> s2 = ['python\n', 'eggy\n', 'hamster\n', 'guido\n'] >>> for line in context_diff(s1, s2, fromfile='before.py', tofile='after.py'): ... sys.stdout.write(line) *** before.py --- after.py *************** *** 1,4 **** ! bacon ! eggs ! ham guido --- 1,4 ---- ! python ! eggy ! hamster guido
difflib.get_close_matches(word, possible[, n][, Cutoff])
最大一致結果のリストを返します
例:
>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy']) ['apple', 'ape'] >>> import keyword >>> get_close_matches('wheel', keyword.kwlist) ['while'] >>> get_close_matches('apple', keyword.kwlist) [] >>> get_close_matches('accept', keyword.kwlist) ['except']
difflib.ndiff(a, b[, linejunk][, charjunk])
a と b (文字列リスト) を比較し、Differ スタイルの差分結果を返します
>>> diff = ndiff('one\ntwo\nthree\n'.splitlines(1), ... 'ore\ntree\nemu\n'.splitlines(1)) >>> print ''.join(diff), - one ? ^ + ore ? ^ - two - three ? - + tree + emu
difflib。復元(シーケンス、どれ)
2 つの整列されたシーケンスによって生成された結果を返します
例
>>> diff = ndiff('one\ntwo\nthree\n'.splitlines(1), ... 'ore\ntree\nemu\n'.splitlines(1)) >>> diff = list(diff) # materialize the generated delta into a list >>> print ''.join(restore(diff, 1)), one two three >>> print ''.join(restore(diff, 2)), ore tree emu
difflib.unified_diff(a, b[, fromfile][, tofile][ , fromfiledate][, tofiledate ][, n][, lineterm])
a と b (文字列リスト) を比較し、差分の結果を統一 diff 形式で返します。
例:
>>> s1 = ['bacon\n', 'eggs\n', 'ham\n', 'guido\n'] >>> s2 = ['python\n', 'eggy\n', 'hamster\n', 'guido\n'] >>> for line in unified_diff(s1, s2, fromfile='before.py', tofile='after.py'): ... sys.stdout.write(line) --- before.py +++ after.py @@ -1,4 +1,4 @@ -bacon -eggs -ham +python +eggy +hamster guido
#coding:utf-8 ''' file:difflibeg.py date:2017/9/9 10:33 author:lockey email:lockey@123.com desc:diffle module learning and practising ''' import difflib hd = difflib.HtmlDiff() loads = '' with open('G:/python/note/day09/0907code/hostinfo/cpu.py','r') as load: loads = load.readlines() load.close() mems = '' with open('G:/python/note/day09/0907code/hostinfo/mem.py', 'r') as mem: mems = mem.readlines() mem.close() with open('htmlout.html','a+') as fo: fo.write(hd.make_file(loads,mems)) fo.close()
以上がPython difflibモジュールの詳しい説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。