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
を一気に作成してくれる。新たな中間ディレクトリが複数あってもOK。
ただし、末端ディレクトリが既に存在している場合はエラー(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')
スポンサーリンク