10.5。 filecmp —ファイルとディレクトリの比較
ソースコード: :source: `Lib / filecmp.py`
filecmp モジュールは、ファイルとディレクトリを比較する関数を定義しますが、さまざまなオプションの時間と精度のトレードオフがあります。 ファイルの比較については、 difflib モジュールも参照してください。
filecmp モジュールは、次の関数を定義します。
- filecmp.cmp(f1, f2[, shallow])
f1 と f2 という名前のファイルを比較し、等しいと思われる場合は
True
を返し、そうでない場合はFalse
を返します。ashallow が指定されてfalseでない限り、同一の os.stat()署名を持つファイルは等しいと見なされます。
この関数を使用して比較されたファイルは、 os.stat()署名が変更されない限り、再度比較されることはありません。
この関数から外部プログラムが呼び出されることはなく、移植性と効率性が高いことに注意してください。
- filecmp.cmpfiles(dir1, dir2, common[, shallow])
common で名前が付けられている dir1 と dir2 の2つのディレクトリにあるファイルを比較します。
一致、不一致、エラーの3つのファイル名のリストを返します。 match には一致するファイルのリストが含まれ、 missmatch には一致しないファイルの名前が含まれ、 errors には比較できなかったファイルの名前が含まれます。 。 ファイルがディレクトリの1つに存在しない場合、ユーザーにファイルを読み取る権限がない場合、またはその他の理由で比較を実行できなかった場合、ファイルはエラーにリストされます。
ashallow パラメーターは、 filecmp.cmp()と同じ意味とデフォルト値を持っています。
たとえば、
cmpfiles('a', 'b', ['c', 'd/e'])
はa/c
をb/c
と比較し、a/d/e
をb/d/e
と比較します。'c'
と'd/e'
は、それぞれ3つの返されたリストのいずれかに含まれます。
例:
>>> import filecmp
>>> filecmp.cmp('undoc.rst', 'undoc.rst')
True
>>> filecmp.cmp('undoc.rst', 'index.rst')
False
10.5.1。 NS dircmp クラス
dircmp インスタンスは、次のコンストラクターを使用して構築されます。
- class filecmp.dircmp(a, b[, ignore[, hide]])
新しいディレクトリ比較オブジェクトを作成して、ディレクトリ a と b を比較します。 ignore は無視する名前のリストであり、デフォルトは
['RCS', 'CVS', 'tags']
です。 hide は非表示にする名前のリストであり、デフォルトは[os.curdir, os.pardir]
です。dircmp クラスは、 filecmp.cmp()で説明されているように、浅い比較を実行してファイルを比較します。
dircmp クラスは、次のメソッドを提供します。
- report()
a と b の比較を(
sys.stdout
に)印刷します。
- report_partial_closure()
a と b および一般的な直接サブディレクトリの比較を出力します。
- report_full_closure()
a と b および一般的なサブディレクトリの比較を(再帰的に)出力します。
dircmp クラスは、比較されているディレクトリツリーに関するさまざまな情報を取得するために使用できるいくつかの興味深い属性を提供します。
__getattr__()
フックを介して、すべての属性が遅延計算されるため、計算が軽量な属性のみを使用しても速度の低下はありません。- left
ディレクトリ a 。
- right
ディレクトリ b 。
- left_list
a 内のファイルとサブディレクトリ。非表示と無視でフィルタリングされます。
- right_list
b 内のファイルとサブディレクトリ。非表示と無視でフィルタリングされます。
- common
a と b の両方のファイルとサブディレクトリ。
- left_only
a 内のファイルとサブディレクトリのみ。
- right_only
b 内のファイルとサブディレクトリのみ。
- common_dirs
a と b の両方のサブディレクトリ。
- common_files
a と b の両方のファイル
- common_funny
a と b の両方で、ディレクトリ間でタイプが異なる名前、または os.stat()がエラーを報告する名前。
- same_files
クラスのファイル比較演算子を使用して、 a と b の両方で同一のファイル。
- diff_files
a と b の両方にあるファイルで、クラスのファイル比較演算子によって内容が異なります。
- funny_files
a と b の両方にあるが、比較できなかったファイル。
- subdirs
common_dirs の名前を dircmp オブジェクトにマッピングする辞書。
subdirs
属性を使用して、2つのディレクトリを再帰的に検索し、一般的な異なるファイルを表示する簡単な例を次に示します。
>>> from filecmp import dircmp
>>> def print_diff_files(dcmp):
... for name in dcmp.diff_files:
... print "diff_file %s found in %s and %s" % (name, dcmp.left,
... dcmp.right)
... for sub_dcmp in dcmp.subdirs.values():
... print_diff_files(sub_dcmp)
...
>>> dcmp = dircmp('dir1', 'dir2')
>>> print_diff_files(dcmp)