note.nkmk.me

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

Date: 2018-04-16 / tags: Python, ファイル処理

Pythonで新しいディレクトリ(フォルダ)を作成するには標準モジュールosを使う。

以下の二つの関数が用意されている。

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

os.mkdir()は制約が多いのでos.makedirs()のほうが便利。

Python3.4以降ではパスをオブジェクトとして操作できるpathlibモジュールを使ってディレクトリを作成することも可能。

スポンサーリンク

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

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

引数に新しいディレクトリのパス文字列を指定する。

パス文字列の操作については以下の記事を参照。

末尾の区切り文字(UNIX, Macはスラッシュ、Windowsはバックスラッシュ)はあっても無くてもOK。

既に存在しているディレクトリを指定するとエラー(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()は再帰的にディレクトリを作成する関数。

深い階層のディレクトリまで一気に新規作成することができる。

デフォルトでは既に存在しているディレクトリを指定するとエラー(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.2os.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()を呼べばOK。

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)

ファイルやディレクトリの存在確認については以下の記事を参照。

スポンサーリンク
シェア
このエントリーをはてなブックマークに追加

関連カテゴリー

関連記事