🐍 Python

mkdir() / touch() でディレクトリ・ファイルを作る

mkdir()は新しいディレクトリを作成し、touch()は中身が空のファイルを作成(または既存ファイルの更新日時だけを更新)します。どちらもUNIX系OSの同名コマンドに由来する名前です。

p.mkdir()                       # ディレクトリを作成(親が無ければエラー)
p.mkdir(parents=True)           # 親ディレクトリも含めて作成
p.mkdir(exist_ok=True)          # 既に存在してもエラーにしない
p.touch()                       # 空ファイルを作成(既存なら更新日時だけ更新)
from pathlib import Path

newdir = Path("newdir")
newdir.mkdir()
print(newdir.exists())
# True
# 既に存在するディレクトリへのmkdir()はFileExistsError
from pathlib import Path

newdir = Path("newdir")  # 既に作成済みとする
try:
    newdir.mkdir()
except FileExistsError as e:
    print("FileExistsError")
# FileExistsError

# exist_ok=Trueなら既存でもエラーにならない
newdir.mkdir(exist_ok=True)
print("mkdir(exist_ok=True) did not raise")
# mkdir(exist_ok=True) did not raise
# parents=Trueで中間ディレクトリごとまとめて作成
from pathlib import Path

nested = Path("a") / "b" / "c"
nested.mkdir(parents=True)
print(nested.exists())
# True
# touch()は空ファイルを作る
from pathlib import Path

newfile = Path("touched.txt")
newfile.touch()
print(newfile.exists())
# True
print(newfile.stat().st_size)
# 0
mkdir()の主な引数
parents(既定False)
Trueにすると、中間の親ディレクトリが無くてもまとめて作成する(mkdir -p相当)
exist_ok(既定False)
Trueにすると、既に同名のディレクトリが存在していてもFileExistsErrorにならない
💡 AIコードレビュー観点:mkdir()単体は中間ディレクトリの有無に弱い

AIが生成したコードでPath("a/b/c").mkdir()のようにparents=Trueを付けずに多階層のディレクトリを作ろうとすると、中間のaやa/bが存在しない環境でFileNotFoundErrorになります。開発環境ではたまたま親ディレクトリが存在していて動いていたコードが、別の環境やクリーンな状態でのデプロイで初めて失敗する典型例です。多階層作成が前提のコードにはmkdir(parents=True, exist_ok=True)を使うのが安全です。

← Python pathlib クイックリファレンス一覧へ戻る / exists/is_file/is_dirで存在確認する →