ディレクトリを作成するには 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 を抜けると自動削除