はじめに
Pythonを使ったファイル・フォルダ操作は、システム管理やスクリプト自動化に欠かせないスキルだ。
とはいえ、「どのモジュールを使えばいいのか?」という問題に直面することは多い。os
、shutil
、pathlib
… どれも使えるが、適材適所で活用しないとコードが冗長になったり、可読性が下がったりする。
今回は、そんな迷いを払拭するために、自身の経験をもとに整理してみる。
ファイル操作の基本
ファイル操作をするなら、まず知っておくべきはopen()
だろう。基本的な使い方は次の通り。
# ファイル作成・書き込み
with open("sample.txt", "w") as f:
f.write("これはテストファイルです")
ポイントはwith
構文を使うこと。これにより、ファイルを開いた後、確実に閉じられるため、リソースリークを防げる。
削除する場合はos.remove()
を使う。
import os
os.remove("sample.txt") # ファイルを削除
削除には注意が必要で、一度消したファイルは基本的に元に戻せない。間違って実行すると後悔するので、削除前にos.path.exists()
で存在チェックすると良い。
ファイルの移動とコピー
ファイルを移動したい場合、shutil.move()
が便利だ。
import shutil
shutil.move("test.txt", "backup/test.txt") # test.txtをbackupフォルダへ移動
コピーするならshutil.copy()
を使う。
shutil.copy("test.txt", "test_copy.txt") # test.txtをtest_copy.txtにコピー
違いに注意!
– shutil.move()
→ ファイルを移動(元の場所には残らない)
– shutil.copy()
→ ファイルをコピー(元のファイルはそのまま)
ファイルの読み書き:pathlibの活用
最近のPythonでは、pathlib
を使ったファイル操作が推奨されることが多い。
from pathlib import Path
# 読み込み
path = Path("sample.txt")
text = path.read_text() # ファイルの内容を文字列として取得
print(text)
# 書き込み
path.write_text("新しい内容を書き込み")
pathlib
のメリットは、オブジェクト指向的に書けること。open()
を使うよりスッキリしたコードになる。
フォルダ操作の基本
フォルダを作るならos.makedirs()
、削除するならos.rmdir()
またはshutil.rmtree()
を使う。
import os
os.makedirs("new_folder") # フォルダ作成
os.rmdir("new_folder") # 空のフォルダを削除
ただし、フォルダにファイルが残っている場合、os.rmdir()
では削除できない。その場合はshutil.rmtree()
を使う。
import shutil
shutil.rmtree("new_folder") # フォルダごと削除(ファイルがあってもOK)
フォルダ内のファイル一覧を取得する
フォルダの中のファイルを取得するなら、os.listdir()
やpathlib.Path.iterdir()
が便利だ。
import os
files = os.listdir("my_folder")
print(files) # フォルダ内のファイル一覧を取得
もしくは、pathlib
でより直感的に書ける。
from pathlib import Path
folder = Path("my_folder")
for file in folder.iterdir():
print(file) # 各ファイル/フォルダのパスを出力
パス操作:絶対パスと相対パス
ファイル操作でパスを扱う際、os.path
とpathlib
のどちらを使うか迷うことがある。
絶対パスを取得するなら、os.path.abspath()
を使う方法が一般的だ。
import os
print(os.path.abspath("test.txt")) # test.txtの絶対パスを取得
しかし、最近はpathlib
を使う方がシンプル。
from pathlib import Path
path = Path("test.txt").resolve() # 絶対パスを取得
print(path)
名前変更と権限変更
ファイルの名前を変更するなら、os.rename()
が手っ取り早い。
import os
os.rename("old_name.txt", "new_name.txt") # ファイル名変更
また、権限を変更するなら、os.chmod()
を使う。例えば、読み取り専用にする場合は以下のように書く。
import os
import stat
os.chmod("test.txt", stat.S_IREAD) # 読み取り専用に変更
コマンド一覧表
操作内容 | モジュール | メソッド/関数 |
---|---|---|
作成 | built-in | open() |
削除 | os | remove() |
移動 | shutil | move() |
コピー | shutil | copy() |
読み込み | pathlib | Path.read_text() |
書き込み | pathlib | Path.write_text() |
メタデータ取得 | os | stat() |
作成 | os | makedirs() |
削除 | os | rmdir() |
フォルダの内容削除 | shutil | rmtree() |
フォルダの内容リスト | os | listdir() |
移動 | os | chdir() |
ディレクトリツリー | pathlib | Path.mkdir(parents=True) |
ファイル一覧 | pathlib | Path.iterdir() |
名前変更 | os | rename() |
権限変更 | os | chmod() |
メタデータ取得 | pathlib | Path.stat() |
存在確認 | os.path | exists() |
存在確認 | pathlib | Path.exists() |
パス情報取得 | os.path | abspath() |
パスの結合 | os.path | join() |
絶対パス化 | os.path | normpath() |
まとめ
Pythonでのファイル・フォルダ操作は、os
、shutil
、pathlib
を適材適所で使い分けるのがポイントだ。
- 簡単なファイル操作:
open()
,os.remove()
,shutil.copy()
- フォルダの操作:
os.makedirs()
,shutil.rmtree()
- パス操作・メタデータ取得:
os.path.abspath()
,pathlib.Path()
- モダンな書き方:
pathlib
を活用すると、可読性の高いコードになる
コメント