filecmp —ファイルとディレクトリの比較
ソースコード: :source: `Lib / filecmp.py`
filecmp モジュールは、ファイルとディレクトリを比較する関数を定義しますが、さまざまなオプションの時間と精度のトレードオフがあります。 ファイルの比較については、 difflib モジュールも参照してください。
filecmp モジュールは、次の関数を定義します。
- filecmp.cmp(f1, f2, shallow=True)
f1 と f2 という名前のファイルを比較し、等しいと思われる場合は
True
を返し、そうでない場合はFalse
を返します。ashallow がtrueの場合、同一の os.stat()署名を持つファイルは等しいと見なされます。 それ以外の場合は、ファイルの内容が比較されます。
この関数から外部プログラムが呼び出されることはなく、移植性と効率性が高いことに注意してください。
この関数は、過去の比較と結果にキャッシュを使用し、ファイルの os.stat()情報が変更されるとキャッシュエントリが無効になります。 clear_cache()を使用して、キャッシュ全体をクリアできます。
- filecmp.cmpfiles(dir1, dir2, common, shallow=True)
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つの返されたリストのいずれかに含まれます。
- filecmp.clear_cache()
filecmpキャッシュをクリアします。 これは、ファイルが変更された後、基になるファイルシステムのmtime解像度内に収まるほど迅速に比較される場合に、役立つことがあります。
バージョン3.4の新機能。
dircmp クラス
- class filecmp.dircmp(a, b, ignore=None, hide=None)
ディレクトリ a と b を比較するために、新しいディレクトリ比較オブジェクトを作成します。 ignore は無視する名前のリストであり、デフォルトは filecmp.DEFAULT_IGNORES です。 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 オブジェクトにマッピングする辞書。
- filecmp.DEFAULT_IGNORES
バージョン3.4の新機能。
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)