目次

前のトピックへ

10.4. statvfsos.statvfs() で使われる定数群

次のトピックへ

10.6. tempfile — 一時的なファイルやディレクトリの生成

このページ

10.5. filecmp — ファイルおよびディレクトリの比較

filecmp モジュールでは、ファイルおよびディレクトリを比較するため、様々な時間/正確性のトレードオフに関するオプションを備えた関数を定義しています。ファイルの比較については、 differ モジュールも参照してください。

filecmp モジュールでは以下の関数を定義しています:

filecmp.cmp(f1, f2[, shallow])

名前が f1 および f2 のファイルを比較し、二つのファイルが同じらしければ True を返し、そうでなければ false を返します。

shallow が与えられておりかつ偽でなければ、 os.stat() の返すシグネチャが一致するファイルは同じであると見なされます。

この関数で比較されたファイルは os.stat() シグネチャが変更されるまで再び比較されることはありません。 use_statcache を真にすると、キャッシュ無効化機構を失敗させます — そのため、 statcache のキャッシュから古いファイル stat 値が使われます。

可搬性と効率のために、個の関数は外部プログラムを一切呼び出さないので注意してください。

filecmp.cmpfiles(dir1, dir2, common[, shallow])

dir1dir2 ディレクトリの中の、 common で指定されたファイルを比較します。

ファイル名からなる3つのリスト: match, mismatch, errors を返します。 match には双方のディレクトリで一致したファイルのリストが含まれ、 mismatch にはそうでないファイル名のリストが入ります。そして errors は比較されなかったファイルが列挙されます。 errors になるのは、片方あるいは両方のディレクトリに存在しなかった、ユーザーにそのファイルを読む権限がなかった、その他何らかの理由で比較を完了することができなかった場合です。

引数 shallow はその意味も標準の設定も filecmp.cmp() と同じです。

例えば、 cmpfiles('a', 'b', ['c', 'd/e'])a/cb/c と、 a/d/eb/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. dircmp クラス

dircmp のインスタンスは以下のコンストラクタで生成されます:

class filecmp.dircmp(a, b[, ignore[, hide]])

ディレクトリ a および b を比較するための新しいディレクトリ比較オブジェクトを生成します。 ignore は比較の際に無視するファイル名のリストで、標準の設定では ['RCS', 'CVS', 'tags'] です。 hide は表示しない名前のリストで、標準の設定では [os.curdir, os.pardir] です。

dircmp クラスは以下のメソッドを提供しています:

report()

a および b の間の比較結果を (sys.stdout に) 出力します。

report_partial_closure()

a および b およびそれらの直下にある共通のサブディレクトリ間での比較結果を出力します。

report_full_closure()

a および b およびそれらの共通のサブディレクトリ間での比較結果を (再帰的に比較して) 出力します。

dircmp は、比較しているディレクトリツリーに関する様々な種類の情報を取得するために使えるような、多くの興味深い属性を提供しています。

__getattr__() フックを経由すると、全ての属性をのろのろと計算するため、速度上のペナルティを受けないのは計算処理の軽い属性を使ったときだけなので注意してください。

left_list

a にあるファイルおよびサブディレクトリです。 hide および ignore でフィルタされています。

right_list

b にあるファイルおよびサブディレクトリです。 hide および ignore でフィルタされています。

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 オブジェクトに対応付けた辞書です。