Pythonでディレクトリ(フォルダ)を作成するmkdir, makedirs

Modified: | Tags: Python, ファイル処理

Pythonで新しいディレクトリ(フォルダ)を作成するには標準ライブラリosモジュールのos.mkdir()またはos.makedirs()を使う。os.mkdir()は制約が多いのでos.makedirs()のほうが便利。

osモジュールは標準ライブラリに含まれているので追加のインストールは不要だが、インポートは必要。

import os

パスをオブジェクトとして操作するpathlibモジュールを使ってディレクトリを作成することもできる。

新しいディレクトリ(フォルダ)を作成: os.mkdir()

os.mkdir()は新しいディレクトリ(フォルダ)を作成する関数。

引数に新しいディレクトリのパス文字列を指定する。パス文字列の操作については以下の記事を参照。

末尾の区切り文字(UNIX, Macはスラッシュ、Windowsはバックスラッシュ)はあっても無くてもよい。

既に存在しているディレクトリを指定するとエラー(FileExistsError)。例えば、同じパス文字列に対して繰り返しos.mkdir()を実行するとエラーとなる。

new_dir_path = 'data/temp/new-dir'

os.mkdir(new_dir_path)

# os.mkdir(new_dir_path)
# FileExistsError: [Errno 17] File exists: 'data/temp/new-dir/'

まだ存在していないディレクトリの中に新たなディレクトリを作成する場合もエラー(FileNotFoundError)。

new_dir_path_recursive = 'data/temp/new-dir2/new-sub-dir'

# os.mkdir(new_dir_path_recursive)
# FileNotFoundError: [Errno 2] No such file or directory: 'data/temp/new-dir2/new-sub-dir'

os.mkdir()を使う場合は作成するディレクトリの直上までのディレクトリが存在している必要がある。中間ディレクトリも含めて一気に新規作成するには次に説明するos.makedirs()を使う。

深い階層のディレクトリまで再帰的に作成: os.makedirs()

os.makedirs()は再帰的にディレクトリを作成する関数。

深い階層のディレクトリまで、中間ディレクトリも含めて一気に新規作成できる。

デフォルトでは既に存在しているディレクトリを指定するとエラー(FileExistsError)。例えば、同じパス文字列に対して繰り返しos.makedirs()を実行するとエラーとなる。

new_dir_path_recursive = 'data/temp/new-dir2/new-sub-dir'

os.makedirs(new_dir_path_recursive)

# os.makedirs(new_dir_path_recursive)
# FileExistsError: [Errno 17] File exists: 'data/temp/new-dir2/new-sub-dir'

引数exist_ok(Python3.2以降)

Pythonのバージョン3.2os.makedirs()に引数exist_okが追加された。

exist_ok=Trueとすると既に存在しているディレクトリを指定してもエラーにならない。デフォルトはexist_ok=Falseなので注意。

os.makedirs(new_dir_path_recursive, exist_ok=True)

3.2より前のバージョンでは、tryで例外処理をするか、os.path.isdir()で対象のディレクトリが存在するか判定して存在しない場合のみos.makedirs()を呼べばよい。

tryで例外処理。FileExistsErrorが出てもpass文で何もしない(ディレクトリが存在している場合は何もしない)。

try:
    os.makedirs(new_dir_path_recursive)
except FileExistsError:
    pass

os.path.isdir()でディレクトリの存在確認してからos.makedirs()

def my_makedirs(path):
    if not os.path.isdir(path):
        os.makedirs(path)

my_makedirs(new_dir_path_recursive)

ファイルやディレクトリの存在確認については以下の記事を参照。

関連カテゴリー

関連記事