よく使うファイル操作早引き
Pythonでよく使う便利なファイル操作のまとめ。
こういう便利な機能を使っちゃうと、C言語でツールを作るのがバカらしくなりますね。
テンポラリファイル(一時ファイル)
tempfileモジュールを使います、テンポラリファイルを作成する方法はいくつかあって、一般的にはTemporaryFile()かmkstemp()を使うと思います。
TemporaryFile()は、ファイルハンドルをクローズすると自動的にファイルが削除されます。
ファイルに同時アクセスが可能かはOS依存です、ファイルをぶろWindowsとかだと意外と使いにくいです。
import tempfile fh = tempfile.TemporaryFile() fh.write("test write.") fh.close()
一方、mkstemp()はファイルハンドルをクローズしてもファイルが存在します、しかし、ユーザーの責任でファイルを削除する必要があります。
import tempfile import os tmp_file = tempfile.mkstemp() #mkstemp()の戻り値は、ファイル値とファイルの絶対パス print tmp_file #ファイル値はfdopen()で扱う fh = os.fdopen(tmp_file[0], "w") fh.write("test write.") fh.close() #mkstemp()の場合、ユーザーが責任を持ってファイルを削除 os.remove(tmp_file[1])
ファイル同士の比較
filecmpモジュールを使えば、ファイルの比較は1行でOK。
ファイルの中身まで調べて比較してくれます。
import filecmp filecmp.cmp(’test.txt', 'test.txt') #=> True filecmp.cmp(’test.txt', 'readme.txt') #=> False
ディレクトリの比較はfilecmpモジュール配下のdircmpクラスを使います。
import filecmp obj = filecmp.dircmp('dir1','dir2') #比較結果をstdoutに出力 obj.report() #dir1だけにあるファイルおよびサブディレクトリのリスト print obj.left_only #dir2だけにあるファイルおよびサブディレクトリのリスト print obj.right_only #両方のディレクトリにあるサブディレクトリのリスト print obj.common_dirs #両方のディレクトリにあるファイルのリスト print obj.common_files #両方のディレクトリにあり、一致するファイルリスト print obj.same_files #両方のディレクトリにあり、一致しないファイルリスト print obj.diff_files
高レベルなファイル操作
shutilモジュールでデレクトリを再帰的にコピー&削除&移動をしてくれます。
import shutil #ディレクトリを再帰的にコピー shutil.copytree("src_dir", "dst_dir") #ディレクトリを再帰的に削除 shutil.rmtree("src_dir") #ディレクトリを再帰的に移動 shutil.move("src_dir", "dst_dir")
ファイルリストをワイルドカードでフィルタリング
fnmatchモジュールで、ファイルリストをフィルタリングすることができます。
import fnmatch a = ["test.txt","test.py","test.png","foo.txt"] #ファイルリストをフィルタリング fnmatch.filter(a,"*.txt") #=>['test.txt', 'foo.txt'] #単一のファイルを判断 fnmatch.fnmatch("test.txt", "*.txt") #=>True #大文字、小文字を判断する場合はfnmatchcase fnmatch.fnmatchcase("test.TXT", "*.txt") #=>False