2021-08-03に投稿

Python 標準ライブラリ filecmp ファイル・ディレクトリ比較

filecmpを使うとファイルやディレクトリの比較を行うことができる。

比較用サンプルファイルの準備

import pathlib

pathlib.Path("./test/A/file1.txt").write_text("TEST1",encoding='utf8')
pathlib.Path("./test/A/file2.txt").write_text("TEST2",encoding='utf8')
pathlib.Path("./test/A/file3.txt").write_text("TEST3",encoding='utf8')
pathlib.Path("./test/B/file1.txt").write_text("TEST1",encoding='utf8')
pathlib.Path("./test/B/file2.txt").write_text("TEST2XXX",encoding='utf8')
pathlib.Path("./test/B/file4.txt").write_text("TEST4",encoding='utf8')

関数

ファイルの比較

import filecmp

# cmp(f1, f2, shallow=True) ファイルの比較
filecmp.cmp("./test/A/file1.txt","./test/B/file1.txt") # => True
filecmp.cmp("./test/A/file2.txt","./test/B/file2.txt") # => False
filecmp.cmp("./test/A/file3.txt","./test/B/file3.txt") # => False

# cmpfiles(dir1, dir2, common, shallow=True) ディレクトリ内ファイルの比較
# 戻り値は(一致したファイル、一致しないファイル、比較されなかったファイル)
filecmp.cmpfiles("./test/A/","./test/B/", ["file1.txt","file2.txt","file3.txt"])
# => (['file1.txt'], ['file2.txt'], ['file3.txt'])

clear_cache() キャッシュクリア

filecmp.clear_cache()

ディレクトリ比較オブジェクト

filecmp.dircmp(a, b, ignore=None, hide=None)

cmp = filecmp.dircmp("./test/A/","./test/B/")
# 比較
cmp.report()

## 直下にある共通要素の比較
# cmp.report_partial_closure()

## 再帰的な比較
# cmp.report_full_closure()
diff ./test/A/ ./test/B/
Only in ./test/A/ : ['file3.txt']
Only in ./test/B/ : ['file4.txt']
Identical files : ['file1.txt']
Differing files : ['file2.txt']

プロパティ

# 両方にあるファイル・ディレクトリ
cmp.common # => ['file1.txt', 'file2.txt']

# 比較対象のディレクトリ
cmp.left # => './test/A/'
cmp.right # => './test/B/'

#  どちらかにだけあるファイル・ディレクトリ
cmp.left_only # => ['file3.txt']
cmp.right_only # => ['file4.txt']

# どちらかのファイル・ディレクトリ
cmp.left_list # => ['file1.txt', 'file2.txt', 'file3.txt']
cmp.right_list # => ['file1.txt', 'file2.txt', 'file4.txt']

# 両方にあるディレクトリ
cmp.common_dirs # => []

# 両方にあるファイル
cmp.common_files # => ['file1.txt', 'file2.txt']
a および b の両方にあるファイルです。

# 両方にあってディレクトリ間でタイプが異なるかos.stat()がエラー
cmp.common_funny # => []

# 同一のファイル
cmp.same_files # => ['file1.txt']

# 異なるファイル
cmp.diff_files # => ['file2.txt']

# 比較されなかったファイル
cmp.funny_files # => []
Originally published at marusankakusikaku.jp
ツイッターでシェア
みんなに共有、忘れないようにメモ

maru3kaku4kaku

Pythonこつこつ学習中。よく忘れる。

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント