ホームページ  >  記事  >  バックエンド開発  >  Python difflibモジュールの詳しい説明

Python difflibモジュールの詳しい説明

巴扎黑
巴扎黑オリジナル
2017-09-15 10:45:356003ブラウズ

この記事では、主に Python difflib モジュールの例を詳しく紹介します。興味のある方は、シーケンスの差分比較のために

difflib モジュールが提供するクラスとメソッドを参照してください。テキストまたは HTML 形式の差分比較ページ。ディレクトリを比較する必要がある場合は、filecmp モジュールを使用できます。

クラス difflib.SequenceMatcher

このクラスは、任意のハッシュ可能な型のシーケンス ペアを比較するためのメソッドを提供します。このメソッドは、「ガベージ」要素を含まない最大の連続一致シーケンスを見つけます。

アルゴリズムの複雑さを比較すると、オリジナルのゲシュタルトマッチングアルゴリズムにより、最悪のケースではn乗演算があり、最良のケースでは線形効率が得られます。

フラグメントの 1% を超えて繰り返される文字、または 200 回繰り返される文字をガベージとして扱うことができる自動ガベージ ヒューリスティックを備えています。この機能は、autojunk を false に設定することでオフにできます。

クラス difflib.Differ

このクラスはテキスト行の差分を比較し、人間が読むのに適した差分結果または増分結果を生成します。 結果の各部分の表現は次のとおりです。 class difflib.HtmlDiff

Python difflibモジュールの詳しい説明 このクラスは、比較結果を両側に表示したり、行ごとに表示したりする 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

実際のアプリケーション例

2 つのファイルを比較そして、違いの結果を示す HTML ファイルを生成します


#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()

実行結果:


生成された HTML ファイルの比較結果:

Python difflibモジュールの詳しい説明

以上がPython difflibモジュールの詳しい説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。