Pythonでよく使うファイル、フォルダーの操作のまとめ。標準ライブラリーのPathまたはshutilを使います。Pathオブジェクトとは何かについてはこちら。
Pathオブジェクトの作り方
インポートとオブジェクト作成
from pathlib import Path
import shutil
# カレントディレクトリーにあるfile.txtを取得。以下の3つは全て同じ結果。
p = Path('file.txt')
p = Path('./file.txt')
p = Path() / 'file.txt'
# 絶対パスでもOK
p = Path('c:/users/user01/documents/file.txt')
# フォルダーもOK
f = Path('c:/users/user01/documents')
パスの情報取得
やること | やり方 |
---|---|
ファイル名 | Path.name |
ファイル名(拡張子なし) | Path.stem |
拡張子 | Path.suffix |
存在するかどうか | Path.exists() |
ファイルかどうか | Path.is_file() |
フォルダーかどうか | Path.is_dir() |
絶対パス | Path.resolve() |
親フォルダー | Path.parent |
パターンに一致するか | Path.match() |
ファイルサイズ(Byte) | Path.stat().st_size |
フォルダー内のパス取得
やること | やり方 |
---|---|
フォルダー内パスのイテレーション | Path.iterdir() |
パターンに一致するパス取得 | Path.glob() |
ファイル、フォルダーのリネーム、コピー等
なぜPathだけでできないのか…
やること | やり方 Path |
やり方 shutil |
備考 |
---|---|---|---|
リネーム |
Path.rename() Path.replace() |
リネーム後のファイルが存在する場合、Path.rename()はFileExistsError 、Path.replace()は上書き。 |
|
ファイルコピー | shutil.copy() | ・コピー先ファイルが存在する場合は上書き ・コピー先フォルダーが存在しない場合はエラー ・戻り値は新しく作成したファイル |
|
ファイル移動 | shutil.move() | 引数はstr(Python 3.9からPathオブジェクトも可)。引数dst はフォルダーでもファイルでもOK。移動先ファイルが存在すれば上書き。 |
|
ファイル削除 | Path.unlink() | ||
フォルダー作成 | Path.mkdir() | ・戻り値はNone ・parents=True で途中の親フォルダーも作成 ・exist_ok=True で既にフォルダーが存在してもエラーとしない |
|
フォルダーコピー | shutil.copytree() | ・srcフォルダーの中身をdstフォルダーにコピー(dstの下にsrcがコピーされる訳ではない) ・dstフォルダーが存在しなくてもOK ・dirs_exist_ok=Trueで既にフォルダーが存在してもエラーとしない |
|
フォルダー移動 | shutil.move() | ||
フォルダー削除 | shutil.rmtree() |
その他
演算子 /
# 演算子/で文字列と結合して新しいPathを生成
Path() / "folder1 / file1.txt"
ファイルの親フォルダー
# 実行中のファイルの親フォルダー
# Path() だとカレントディレクトリー(Path.cwd())となり、ファイルからの相対パスを設定できないこともある
Path(__file__).parent