Python Path.mkdir()とは?フォルダを作成する方法
PythonのPath.mkdir()は、フォルダを作成するpathlibのメソッドです。
osではmkdir()とmakedirs()を使い分ける必要がありましたが、pathlibでは引数だけで両方に対応できます。
Path.mkdir()の基本的な使い方
from pathlib import Path
Path("data").mkdir()
print(Path("data").is_dir())
実行結果:
True
戻り値はありません。作成できなければ例外が出ます。
parents=Trueで階層をまとめて作る
引数なしでは1階層しか作れません。
from pathlib import Path
Path("a/b/c").mkdir()
実行結果:
FileNotFoundError: [Errno 2] No such file or directory: 'a/b/c'
「作ろうとしているのにFileNotFoundError」は、親フォルダのa/bがないという意味です。
parents=Trueを付けると、途中のフォルダも作られます。
from pathlib import Path
Path("a/b/c").mkdir(parents=True)
print(Path("a/b/c").is_dir())
実行結果:
True
これがos.makedirs()に相当します。
exist_ok=Trueが実務での定番
from pathlib import Path
Path("data").mkdir()
Path("data").mkdir()
実行結果:
FileExistsError: [Errno 17] File exists: 'data'
exist_ok=Trueを付けると、既にあっても何もせず正常終了します。
from pathlib import Path
out = Path("output/2026/09")
out.mkdir(parents=True, exist_ok=True)
(out / "report.csv").write_text("data", encoding="utf-8")
print(out / "report.csv")
実行結果:
output/2026/09/report.csv
parents=True, exist_ok=Trueをセットで指定するのが、実務で最もよく使う形です。何度実行しても同じ結果になります。
2つの引数の違い
| 引数 | 効果 | os相当 |
|---|---|---|
| (なし) | 1階層だけ作る | os.mkdir() |
parents=True |
途中のフォルダも作る | os.makedirs() |
exist_ok=True |
既にあってもエラーにしない | os.makedirs(exist_ok=True) |
2つは独立した引数です。parents=Trueだけでは、最終階層が既に存在するとエラーになります。
exist_ok=Trueでもエラーになる場合
from pathlib import Path
Path("data").write_text("x", encoding="utf-8") # data という名前のファイル
Path("data").mkdir(exist_ok=True)
実行結果:
FileExistsError: [Errno 17] File exists: 'data'
exist_ok=Trueが許すのは「フォルダとして既に存在する場合」だけです。ファイルが邪魔をしているのは意図しない状態なので、きちんとエラーになります。
ファイルの保存先を用意する
最も頻出のパターンです。
from pathlib import Path
out = Path("reports/2026/09/summary.csv")
out.parent.mkdir(parents=True, exist_ok=True)
out.write_text("data", encoding="utf-8")
print(out)
実行結果:
reports/2026/09/summary.csv
out.parentで親フォルダを取得して、そこを作ってから書き込みます。
os版のos.makedirs(os.path.dirname(out), exist_ok=True)より短く、意図も読み取りやすくなっています。
日付ごとのフォルダを作る
from pathlib import Path
from datetime import datetime
now = datetime(2026, 9, 16)
path = Path("logs") / now.strftime("%Y") / now.strftime("%m") / now.strftime("%d")
path.mkdir(parents=True, exist_ok=True)
print(path)
実行結果:
logs/2026/09/16
/演算子で組み立てられるため、os.path.join()を書かずに済みます。
mode引数の落とし穴
from pathlib import Path
Path("private").mkdir(mode=0o700, exist_ok=True)
パーミッションを指定できますが、注意点が2つあります。
- umask(システムの既定設定)の影響を受けるため、指定どおりにならないことがある
- Windowsではほぼ無視される
またparents=Trueで作られる途中のフォルダにはmodeが適用されません。確実に設定したい場合は、作成後にchmod()を使ってください。
from pathlib import Path
p = Path("private")
p.mkdir(exist_ok=True)
p.chmod(0o700)
Path.mkdir()のまとめ
Path.mkdir()は引数なしだと1階層だけ作るparents=Trueで階層をまとめて作る(os.makedirs()相当)exist_ok=Trueで既存を許容。2つはセットで使うのが定番- 同名のファイルがある場合は
exist_ok=Trueでもエラー - 保存先の用意は
out.parent.mkdir(parents=True, exist_ok=True) modeはumaskの影響を受け、途中のフォルダには適用されない





