Pythonでディレクトリを作成する方法(mkdir, makedirs)

Pythonのmkdir、makedirsでディレクトリを作成する方法について解説します。

Pythonでディレクトリを作成する方法(mkdir, makedirs)

この記事では、Pythonでディレクトリ(フォルダ)を作成する方法について解説します。

Pythonでディレクトリを作るには、os.mkdir()os.makedirs()という2つの関数を使います。

まずはじめに、osというPythonの標準ライブラリをインポートしましょう。osライブラリを使って、ディレクトリの作成や操作ができます。

# osをインポートする

import os

新しいディレクトリを作成する(mkdir)

os.mkdir()関数を使って、指定したパスに新しいディレクトリを作成することができます。

以下の例では、sample_directoryという名前のディレクトリを作成しています。

# sample_directoryというフォルダを作成する

directory_path = "sample_directory"

os.mkdir(directory_path)

os.mkdir()関数には、以下の引数があります。

  • path: 作成するディレクトリのパスを指定します。
  • mode(オプション): ディレクトリのパーミッションを設定します。デフォルトは0o777ですが、umaskの設定によって実際のパーミッションが変わります。

複数階層のディレクトリをまとめて作成する(makedirs)

os.makedirs()関数を使うと、ネストしたディレクトリ(親ディレクトリとその中の子ディレクトリ)を一度に作成できます。以下の例では、parent_directoryの中にchild_directoryを作成しています。

# parent_directoryとchild_directoryをまとめて作成する

nested_directory_path = "parent_directory/child_directory"

os.makedirs(nested_directory_path)

os.makedirs()関数には、以下の引数があります。

  • name: 作成するディレクトリのパスを指定します。
  • mode(オプション): ディレクトリのパーミッションを設定します。デフォルトは0o777ですが、umaskの設定によって実際のパーミッションが変わります。
  • exist_ok(オプション): 既に存在するディレクトリをエラーとして扱わないようにする場合は、exist_ok=Trueを指定します。デフォルトはFalseです。

mkdirとmakedirs関数のFileExistsErrorとFileNotFoundErrorについて

os.mkdir()os.makedirs()関数を使用する際、2つのエラーが発生する可能性があります。それらは、FileExistsErrorFileNotFoundErrorです。それぞれのエラーについて説明し、回避方法や注意点も解説します。

FileExistsError

FileExistsErrorは、指定したパスにすでにディレクトリ(またはファイル)が存在する場合に発生します。これを回避するには、ディレクトリが存在するかどうかをチェックし、存在しない場合にのみディレクトリを作成するようにしましょう。

以下の例では、os.path.exists()関数を使ってディレクトリの存在を確認しています。

# フォルダが存在しない場合だけフォルダを作成

directory_path = "sample_directory"

if not os.path.exists(directory_path):
    os.mkdir(directory_path)

また、os.makedirs()関数のexist_ok引数をTrueに設定することで、既存のディレクトリがある場合でもエラーが発生しないようにすることができます。

# 既存のディレクトリがあってもFileExistsErrorを出さないようにする

nested_directory_path = "parent_directory/child_directory"

os.makedirs(nested_directory_path, exist_ok=True)

FileNotFoundError

FileNotFoundErrorは、os.mkdir()関数を使った際に、指定したパスに親ディレクトリが存在しない場合に発生します。これを回避するには、os.makedirs()関数を使って、必要な親ディレクトリも含めて一度に作成することができます。

# まだ存在していないフォルダも含めて作成する

nested_directory_path = "parent_directory/child_directory"

os.makedirs(nested_directory_path)

FileExistsErrorFileNotFoundErrorは、ディレクトリ作成の前にディレクトリの存在をチェックすることで回避できます。ただし、マルチスレッドやマルチプロセスの環境では、ディレクトリの存在チェックとディレクトリの作成の間で競合状態が発生する可能性があるため、適切なロックや同期処理が必要です。