Pythonでのファイル操作は、従来のosモジュールによる方法から、より直感的で安全なPathLibを使用する方法へと進化してきました。
本記事では、モダンなPythonにおけるファイル・ディレクトリの操作方法について、PathLib、tempfile、shutilという3つの重要なモジュールを中心に解説します。
Pathlib – ファイル・ディレクトリの操作
・pathlib.path.cwd()などで現在のディレクトリパスを取得したり、mkdir()でディレクトリ作成、touch()でファイル作成、exeists()で存在確認など様々なメソッドが利用できます。
・p.unlink()でファイル削除、p.itedir(や)p.glab()でファイル探索できます。ジェネレーターで返されます。
パス・ファイル名の取得
from pathlib import Path
# 現在地のディレクトリ取得
print(Path.cwd())
# ディレクトリとファイルを取得
print(list(Path.iterdir(Path.cwd())))
# パスの存在確認
print(Path('./test_dir').exists())
ファイル操作
# ファイル作成
Path.touch('./test.txt')
# ファイルのリネーム
Path.rename('./test.txt','./test2.txt')
# ファイル削除
Path.unlink('./test2.txt')
ディレクトリ操作
# フォルダ作成
Path.mkdir('./test_dir')
# フォルダ削除
Path.rmdir('./test_dir')
ファイルの検索
# ファイルの検索
print(list(Path().iterdir()))
# ファイルの検索(再帰的検索)
print(list(Path().glob('**/*.py')))
tempfile – 一時ファイル
・一時的にファイルやディレクトリを利用する場合に使用します。withと合わせて利用し、withが終了する時点でファイルが削除されたり、ファイルを閉じたと同時に削除されたりします。
import tempfile
with tempfile.TemporaryFile() as f:
f.write(b'hello world\n')
print(f.seek(0))
print(f.read())
shutil – 複雑な操作
・複数ファイルの同時処理や再帰的に処理を行いたい場合などに利用します。
・shutil.copy()で複雑な設定のコピー処理ができたります。copyfileはデータのみコピー、copyはデータとパーミッション、copy2は全てをコピーする。
import shutil
# copyfile(データのみコピー)
shutil.copyfile('from/a.txt','from/b.txt')
# copy(データとパーミッションをコピー)
shutil.copy('from/a.txt','from/c.txt')
# copy2(データとパーミッション、メタデータをコピー)
shutil.copy2('from/a.txt','from/d.txt')
copytree(元ディレクトリ、先ディレクトリ)を使用することで配下のファイルを一括でコピーしたりできます。
# from内のファイルをtoへコピーする
shutil.copytree('from','to')