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

ディレクトリを作成するには os.mkdir()os.makedirs()、あるいは pathlib.Path.mkdir() を使う。

単一のディレクトリを作成する

os.mkdir() は単一のディレクトリを作成する。

import os

os.mkdir('newdir')

親ディレクトリが存在しない場合はエラーになる。また、すでにディレクトリが存在する場合も FileExistsError が発生する。

中間ディレクトリも含めて作成する

os.makedirs() を使うと、存在しない親ディレクトリも含めて一度に作成できる。

import os

os.makedirs('parent/child/grandchild')

exist_ok=True を指定すると、ディレクトリがすでに存在してもエラーにならない。

import os

os.makedirs('mydir', exist_ok=True)

pathlib を使う方法

pathlib では Path.mkdir() メソッドでディレクトリを作成する。

from pathlib import Path

Path('newdir').mkdir()

parents=True を指定すると親ディレクトリも含めて作成し、exist_ok=True でディレクトリが存在してもエラーにならない。

from pathlib import Path

Path('parent/child/grandchild').mkdir(parents=True, exist_ok=True)

パーミッションを指定する

mode 引数でディレクトリのパーミッションを指定できる。

import os
from pathlib import Path

# os.makedirs
os.makedirs('secure_dir', mode=0o700)

# pathlib
Path('secure_dir').mkdir(mode=0o700)

0o700 は所有者のみが読み書き実行できる設定だ。ただし、実際のパーミッションは umask の影響を受ける。

安全なディレクトリ作成パターン

ディレクトリが存在しない場合のみ作成する一般的なパターンを示す。

from pathlib import Path

def ensure_dir(path):
    """ディレクトリが存在しなければ作成する"""
    Path(path).mkdir(parents=True, exist_ok=True)

# 使用例
ensure_dir('logs/2024/01')

この方法なら、ディレクトリの有無を事前にチェックする必要がない。

一時ディレクトリを作成する

一時的なディレクトリを作成する場合は tempfile モジュールを使うと、自動的に削除される。

import tempfile

with tempfile.TemporaryDirectory() as tmpdir:
    print(tmpdir)  # /tmp/tmpxxxxxx
    # ここで作業
# with を抜けると自動削除