Pythonで深い階層のディレクトリを再帰的に作成するmakedirs

存在しないディレクトリにos.mkdirでディレクトリを新規作成するとエラー Pythonでディレクトリ(フォルダ)を作成するときに使うos.mkdirだが、存在しないディレクトリの中に新たにディレクトリを作成しようとするとエラー(FileNotFoundError)が発生します。

import os

os.mkdir('not_exist_dir/new_dir')
# FileNotFoundError

os.makedirsで再帰的にディレクトリを作成

os.mkdirではなくos.makedirsを使うと、中間ディレクトリを作成してくれるので、深い階層のディレクトリを再帰的に作成できます。

os.makedirs('not_exist_dir/new_dir')

中間ディレクトリnot_exist_dirと末端ディレクトリnew_dirを一気に作成してくれる。新たな中間ディレクトリがどれだけあっても問題ありません。 ただし、末端ディレクトリが既に存在している場合はエラー(FileExistsError)が発生します。

os.makedirs('exist_dir/exist_dir')
# FileExistsError

引数exist_okがある場合

Python 3.2以降は引数exist_okが追加されており、exist_ok=Trueとすると既に末端ディレクトリが存在している場合もエラーが発生しない。末端ディレクトリが存在していなければ新規作成するし、存在していれば何もしない。前もって末端ディレクトリの存在確認をする必要がないので便利です。

os.makedirs('exist_dir/exist_dir', exist_ok=True)

引数exist_okがない場合

Pythonのバージョンが古くos.makedirsに引数exist_okがない場合は、先にos.path.existsで末端ディレクトリの有無を判定して条件分岐すれば、末端ディレクトリが存在しない場合のみ新規に作成するようにできます。

if not os.path.exists('exist_dir/exist_dir'):
    os.makedirs('exist_dir/exist_dir')
Last Updated: 6/26/2019, 10:34:03 PM