はじめに
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を活用すると、可読性の高いコードになる


コメント