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

Pythonで新しいディレクトリ(フォルダ)を作成するには標準モジュールosを使います。 以下の二つの関数が用意されています。

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

os.mkdir()は制約が多いのでos.makedirs()のほうが便利です。 Python3.4以降ではパスをオブジェクトとして操作できるpathlibモジュールを使ってディレクトリを作成することもできます。

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

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

16.1. os.mkdir() — 雑多なオペレーティングシステムインタフェース — Python 3.6.5 ドキュメント

引数に新しいディレクトリのパス文字列を指定します。 パス文字列の操作については

末尾の区切り文字(UNIX, Macはスラッシュ、Windowsはバックスラッシュ)はあっても無くても問題ありません。 既に存在しているディレクトリを指定するとエラー(FileExistsError例外)が発生します。例えば、同じパス文字列に対して繰り返しos.mkdir()を実行するとエラーとなります。

import os

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()は再帰的にディレクトリを作成する関数。

16.1. os.makedirs() — 雑多なオペレーティングシステムインタフェース — Python 3.6.5 ドキュメント

深い階層のディレクトリまで一気に新規作成することができます。 デフォルトでは既に存在しているディレクトリを指定するとエラー(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.2でos.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)
Last Updated: 6/26/2019, 10:34:03 PM