このチュートリアルは、Pythonにおける必須のファイルとディレクトリの操作に関する包括的なガイドを提供し、os
モジュールとshutil
モジュールの機能を活用します。ディレクトリの作成、アクセス、一覧表示、変更、削除を網羅し、Pythonスクリプト内でファイルシステムを効果的に管理するためのスキルを習得します。
目次
1. ディレクトリの作成
os
モジュールは、オペレーティングシステムとのやり取りを行うための関数を提供します。os.mkdir()
は単一のディレクトリを作成し、os.makedirs()
はネストされたディレクトリの作成を処理します。exist_ok
パラメータは、ディレクトリが既に存在する場合のエラーを防ぎます。
import os
# 単一ディレクトリの作成
os.mkdir("my_new_directory")
# ネストされたディレクトリの作成
os.makedirs("nested/directories/example", exist_ok=True)
print("ディレクトリが正常に作成されました!")
2. 現在のディレクトリの取得
os.getcwd()
を使用して、現在の作業ディレクトリを取得します。
import os
current_directory = os.getcwd()
print(f"現在の作業ディレクトリ: {current_directory}")
3. ディレクトリ内容の一覧表示
os.listdir()
は、パス内のすべてのエントリ(ファイルとディレクトリ)を一覧表示します。os.path.isdir()
と組み合わせて、ディレクトリのみをフィルタリングします。
import os
directory_path = "."
all_entries = os.listdir(directory_path)
directories = [entry for entry in all_entries if os.path.isdir(os.path.join(directory_path, entry))]
print("ディレクトリ:")
for directory in directories:
print(directory)
4. 作業ディレクトリの変更
os.chdir()
は、現在の作業ディレクトリを変更します。存在しないディレクトリなど、潜在的な問題を管理するために、常にエラー処理(例:try-except
ブロックの使用)を含めます。
import os
try:
os.chdir("my_new_directory")
print(f"現在の作業ディレクトリが変更されました: {os.getcwd()}")
os.chdir("..") #一つ上のディレクトリに戻る
print(f"現在の作業ディレクトリが元に戻りました: {os.getcwd()}")
except FileNotFoundError:
print("エラー: ディレクトリが見つかりません。")
except OSError as e:
print(f"OSエラーが発生しました: {e}")
5. ディレクトリの名前変更と削除
os.rename()
はディレクトリの名前を変更します。os.rmdir()
は空のディレクトリを削除します。空でないディレクトリの場合は、shutil.rmtree()
を使用しますが、これはターゲットディレクトリ内のすべてのものを再帰的に削除するため、非常に注意が必要です。この関数を使用する前に、常に重要なデータのバックアップを取ってください。
import os
import shutil
# ディレクトリの名前変更
os.rename("my_new_directory", "renamed_directory")
# 空のディレクトリの削除
os.rmdir("empty_directory") # "empty_directory"という名前の空のディレクトリが必要です
# 空でないディレクトリの削除(非常に注意して使用してください!)
shutil.rmtree("non_empty_directory") # "non_empty_directory"という名前のディレクトリが必要です - これにより、内部のすべてが削除されます。
print("ディレクトリオペレーションが完了しました。")
6. パス操作テクニック
os.path
モジュールは、プラットフォーム固有の問題を回避するために不可欠な、安全で移植性の高いパス操作のためのツールを提供します。
import os
# パスの安全な結合
path = os.path.join("path", "to", "my", "file.txt")
# ファイル名と拡張子の取得
file_name, file_ext = os.path.splitext(path)
# パスが存在するかどうかを確認
if os.path.exists(path):
print("パスが存在します")
7. 堅牢なエラー処理
常に潜在的なエラー(例:FileNotFoundError
、PermissionError
、OSError
)を予測し、適切なエラー処理メカニズムを実装して、コードを堅牢にし、予期しないクラッシュを防ぎます。