note.nkmk.me

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

Date: 2017-11-22 / tags: Python, ファイル操作
このエントリーをはてなブックマークに追加
スポンサーリンク

存在しないディレクトリに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')
スポンサーリンク
シェア
このエントリーをはてなブックマークに追加

関連カテゴリー

関連記事