Pythonでディレクトリ操作を完全解説!作成・削除・一覧取得の基本
生徒
「Pythonでフォルダを作ったり、消したり、一覧を確認したりする方法はありますか?」
先生
「はい、Pythonではosモジュールやpathlibモジュールを使って、簡単にディレクトリの作成・削除・一覧取得ができます。」
生徒
「osとpathlibの違いは何ですか?」
先生
「osは昔からある方法で、少し手続きが必要ですが強力です。pathlibはPython3から追加された新しい方法で、オブジェクト指向の書き方で直感的に操作できます。」
生徒
「なるほど、じゃあ両方の使い方を見たいです!」
先生
「では順番に見ていきましょう!」
1. osモジュールでディレクトリを操作する方法
osモジュールは、Pythonでディレクトリやファイルを操作するための基本的なモジュールです。まずはディレクトリの作成から見てみましょう。
import os
# ディレクトリの作成
os.mkdir("sample_dir")
print("ディレクトリ 'sample_dir' を作成しました。")
このコードでは、カレントディレクトリ(今Pythonを実行している場所)にsample_dirという名前のフォルダを作成しています。
# ディレクトリの削除
os.rmdir("sample_dir")
print("ディレクトリ 'sample_dir' を削除しました。")
os.rmdir()は中身が空のフォルダしか削除できません。もし中身にファイルがある場合は削除できないので注意してください。
# ディレクトリの一覧取得
print(os.listdir("."))
os.listdir()は指定したディレクトリの中にあるファイルやフォルダをリストとして取得します。"."は「今のフォルダ」を意味します。
2. pathlibモジュールでディレクトリを操作する方法
pathlibはPython3から使える、より直感的なディレクトリ操作の方法です。オブジェクト指向で書けるので初心者にもわかりやすいです。
from pathlib import Path
# ディレクトリの作成
path = Path("sample_dir")
path.mkdir()
print("ディレクトリ 'sample_dir' を作成しました。")
Pathオブジェクトを作って、mkdir()メソッドでディレクトリを作成します。
# ディレクトリの削除
path.rmdir()
print("ディレクトリ 'sample_dir' を削除しました。")
rmdir()も空のフォルダしか削除できません。osと同じルールです。
# ディレクトリの一覧取得
current_dir = Path(".")
for item in current_dir.iterdir():
print(item)
iterdir()メソッドでフォルダ内のファイルやディレクトリを順番に取り出すことができます。
3. フォルダ操作の便利なポイント
Pythonでフォルダを操作する際に覚えておくと便利なポイントをまとめます。
- ディレクトリがすでに存在するかを確認するには、
os.path.exists()やPath.exists()を使います。 - フォルダの中身が空かどうかを確認するには、
os.listdir()やPath.iterdir()で確認できます。 - 複雑なパス操作(親フォルダや子フォルダの結合)は
os.path.join()やPath / "フォルダ名"で行うと安全です。
# ディレクトリが存在するか確認
if not path.exists():
path.mkdir()
print("新しいディレクトリを作成しました。")
else:
print("ディレクトリはすでに存在します。")
このように事前にチェックしておくと、プログラムがエラーで止まるのを防げます。
4. osとpathlibのどちらを使うべきか
両方使えますが、最近のPythonではpathlibが推奨されています。コードが読みやすく、直感的で、WindowsやMac/LinuxなどOSに依存しない書き方ができます。
ただし、古いコードやライブラリではosを使っている場合が多いので、状況に応じて使い分けると良いでしょう。
5. まとめて使ったサンプル
最後に、ディレクトリ作成・一覧取得・削除をまとめて実行するサンプルです。
from pathlib import Path
# フォルダ作成
folder = Path("my_folder")
folder.mkdir(exist_ok=True)
# 中身一覧取得
for item in folder.iterdir():
print(item)
# フォルダ削除
folder.rmdir()
print("処理が完了しました。")
exist_ok=Trueを使うと、すでにフォルダがあってもエラーになりません。