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の影響を受け、途中のフォルダには適用されない

あわせて読みたい

プログラミング学習に興味がある方は、まずは無料体験会へ

無料体験会・お申し込みはこちら