PYTHON MEBY

Pythonでディレクトリを作成・削除(os.mkdir, os.makedirs, os.rmdir, shutil.rmtree)

この記事では、Pythonのosモジュールとshutilモジュールを用いて、ディレクトリを作成および削除する方法を解説します。os.mkdir、os.makedirs、os.rmdir、shutil.rmtreeの使い方、注意点、そしてエラーハンドリングの方法を説明します。

目次

os.mkdir(): ディレクトリの作成

os.mkdir()関数は、指定したパスに新しいディレクトリを作成します。引数には、作成するディレクトリのパスを指定します。すでに存在するディレクトリを指定した場合、FileExistsErrorが発生します。

import os
try:
    os.mkdir("new_directory")
    print("ディレクトリ 'new_directory' が作成されました。")
except FileExistsError:
    print("ディレクトリ 'new_directory' は既に存在します。")

このコードは、カレントディレクトリに"new_directory"という名前のディレクトリを作成しようとします。ディレクトリが既に存在する場合は、エラーメッセージを表示します。

import os
path = "./path/to/new/directory"
try:
    os.makedirs(path, exist_ok=True)
except OSError as e:
    print(f"ディレクトリ作成エラー: {e}")

このコードは、カレントディレクトリに"path/to/new/directory"という名前のディレクトリを作成しようとします。既に存在する場合でもエラーは発生しません。

os.makedirs(): 複数階層のディレクトリの作成

os.makedirs()関数は、複数階層のディレクトリを一度に作成することができます。存在しない中間ディレクトリも自動的に作成します。

import os
try:
    os.makedirs("new_directory/subdir1/subdir2", exist_ok=True)
    print("ディレクトリ 'new_directory/subdir1/subdir2' が作成されました。")
except OSError as e:
    print(f"ディレクトリ作成エラー: {e}")

このコードは、"new_directory/subdir1/subdir2"という3階層のディレクトリ構造を作成します。exist_ok=Trueを指定することで、ディレクトリが既に存在する場合でもエラーになりません。

os.rmdir(): ディレクトリの削除

os.rmdir()関数は、空のディレクトリを削除します。ディレクトリの中にファイルやサブディレクトリが存在する場合は、OSErrorが発生します。

import os
try:
    os.rmdir("empty_directory")
    print("ディレクトリ 'empty_directory' が削除されました。")
except FileNotFoundError:
    print("ディレクトリ 'empty_directory' は見つかりません。")
except OSError:
    print("ディレクトリ 'empty_directory' は空ではありません。")

このコードは、"empty_directory"という名前のディレクトリを削除しようとします。ディレクトリが存在しない場合、または空でない場合は、エラーメッセージを表示します。

shutil.rmtree(): 複数階層のディレクトリの削除

shutil.rmtree()関数は、指定したディレクトリとその中のすべてのファイルとサブディレクトリを再帰的に削除します。非常に強力な関数であるため、使用には注意が必要です。誤って重要なデータを削除しないように、十分に確認してから使用してください。

import shutil
try:
    shutil.rmtree("directory_to_remove")
    print("ディレクトリ 'directory_to_remove' とその内容は削除されました。")
except FileNotFoundError:
    print("ディレクトリ 'directory_to_remove' は見つかりません。")
except OSError as e:
    print(f"ディレクトリ削除エラー: {e}")

このコードは、"directory_to_remove"というディレクトリとその中のすべての内容を削除します。エラー処理によって、ファイルが存在しない場合や削除に失敗した場合のエラーメッセージを表示します。

注意点

  • ディレクトリが存在するかどうかを確認してから操作を行う
  • 誤って重要なデータを削除しないよう、十分に注意する
  • shutil.rmtree()は強力な関数なので、慎重に使用する
  • エラーハンドリングを適切に行う

エラーハンドリング

ディレクトリ操作では、FileNotFoundError、FileExistsError、OSErrorなどの例外が発生する可能性があります。適切な例外処理を行うことで、プログラムの安定性を高めることができます。

import os
try:
    # ディレクトリ操作
except FileNotFoundError:
    print("ファイルまたはディレクトリが見つかりません")
except FileExistsError:
    print("ファイルまたはディレクトリは既に存在します")
except OSError as e:
    print(f"OSエラーが発生しました: {e}")
except Exception as e:
    print(f"予期せぬエラーが発生しました: {e}")

サンプルコード

以下のサンプルコードは、ディレクトリを作成し、ファイルを作成し、ディレクトリを削除します。

import os
import shutil

try:
    # ディレクトリを作成
    os.makedirs("sample_dir/subdir", exist_ok=True)
    # ファイルを作成
    with open("sample_dir/file1.txt", "w") as f:
        f.write("Hello, world!")
    print("ディレクトリとファイルが作成されました。")
    # ディレクトリを削除
    shutil.rmtree("sample_dir")
    print("ディレクトリが削除されました。")
except Exception as e:
    print(f"エラーが発生しました: {e}")

関連記事