Pythonでディレクトリ(フォルダ)を作成するmkdir, makedirs
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.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)
ファイルやディレクトリの存在確認については以下の記事を参照。