概要(os.mkdir は「新しいフォルダを1つ作る」ための基本関数)
os.mkdir は、指定した場所にディレクトリ(フォルダ)を1つ作成する関数です。作る場所の親フォルダが存在していることが前提で、すでに同名フォルダがあると例外になります。まず「どこに作るか」をはっきりさせ、相対パスなら現在の作業ディレクトリ、絶対パスならルートからの完全な場所を使い分けましょう。
import os
# カレント(現在の作業場所)に new_folder を作る
os.mkdir("new_folder")
Python基本の使い方とパスの考え方(ここが重要)
相対パスと絶対パス(作る場所を誤らない)
相対パスは「今いる場所」からの相対指定、絶対パスはルートからの完全指定です。今いる場所は os.getcwd() で確認できます。迷ったら絶対パスで指定すると誤作成が減ります。
import os
print(os.getcwd()) # 現在位置を確認
os.mkdir("logs") # 相対パス:今の場所の直下に作成
os.mkdir(r"C:\work\project\logs") # 絶対パス(Windows例)
# os.mkdir("/home/user/project/logs") # 絶対パス(UNIX例)
Python既存チェックをしてから作る(安全運用の基本線)
同名フォルダがあると FileExistsError が出ます。存在チェックしてから作るのが定石です。作り直したいのか、既存ならスキップしたいのかを意図で決めておきましょう。
import os
name = "logs"
if not os.path.exists(name):
os.mkdir(name)
Python親フォルダがないとエラー(FileNotFoundError)
os.mkdir は「1階層だけ」作ります。親フォルダが存在しないと FileNotFoundError になります。階層ごと作りたいなら os.makedirs を使うか、pathlib.Path.mkdir(parents=True) を使います。
import os
# 親がないと失敗
# os.mkdir("reports/2025/12") # 親 reports, 2025 がなければエラー
# 階層ごと作る(推奨)
os.makedirs("reports/2025/12", exist_ok=True)
Pythonよくある例外と対策(深掘り)
FileExistsError(既にある)への対策
「既存なら例外」か「既存でもスキップ」かを事前に決めます。スキップしたいなら os.path.exists を使うか、os.makedirs(…, exist_ok=True) に切り替えます。
import os
try:
os.mkdir("logs")
except FileExistsError:
pass # 既存なら何もしない(ポリシーに合わせて)
PythonFileNotFoundError(親がない)への対策
親を作るか、間違ったパスかを見直します。階層作成は os.makedirs が速いです。
import os
# 親ごと作る
os.makedirs("project/data/raw", exist_ok=True)
PythonPermissionError(権限なし)への対策
書き込み権限がない場所に作ろうとすると失敗します。ユーザーの権限を確認するか、書き込み可能なディレクトリに変更しましょう。
import os
def safe_mkdir(path: str) -> bool:
try:
os.mkdir(path)
return True
except (FileExistsError, FileNotFoundError, PermissionError):
return False
Python実務での使い分け(os.mkdir / os.makedirs / pathlib)
単発なら os.mkdir、階層なら os.makedirs
1階層だけ増やすなら os.mkdir。フォルダ階層をまとめて用意するなら os.makedirs(…, exist_ok=True) が安全・簡潔です。
import os
os.mkdir("output") # 単発
os.makedirs("output/reports/2025", exist_ok=True) # 階層+既存OK
Python現代的には pathlib.Path を優先(読みやすく安全)
Path はオブジェクト指向のパス操作。parents と exist_ok が同時に使え、結合は「/」で直感的です。初心者は最初から Path に慣れるとミスが激減します。
from pathlib import Path
base = Path("output") / "reports" / "2025"
base.mkdir(parents=True, exist_ok=True)
Python例題で身につける(定番から一歩先まで)
例題1:ログ用フォルダが無ければ作ってから追記
import os
def append_log(msg: str) -> None:
root = "logs"
if not os.path.exists(root):
os.mkdir(root)
with open(os.path.join(root, "app.log"), "a", encoding="utf-8", newline="\n") as f:
f.write(msg + "\n")
append_log("started")
Python例題2:日付ごとのレポートフォルダを安全に作成(階層)
import os
from datetime import date
def ensure_daily_report_dir(base: str = "reports") -> str:
today = date.today().isoformat()
path = os.path.join(base, today)
os.makedirs(path, exist_ok=True)
return path
folder = ensure_daily_report_dir()
Python例題3:ユーザー名ごとに作成(存在チェック+権限対策)
import os
def ensure_user_dir(root: str, user: str) -> bool:
path = os.path.join(root, user)
try:
if not os.path.exists(path):
os.mkdir(path)
return True
except PermissionError:
return False
ok = ensure_user_dir("users", "hanako")
Python例題4:pathlib でプロジェクト構造をまとめて作る
from pathlib import Path
def scaffold(root: str = "project") -> None:
base = Path(root)
for p in [base/"src", base/"tests", base/"docs"]:
p.mkdir(parents=True, exist_ok=True)
(base/"src"/"main.py").write_text("# entry\n", encoding="utf-8")
scaffold()
Pythonまとめ
os.mkdir は「1階層のフォルダを作る」ための基本関数です。相対/絶対パスを意識し、既存チェックで FileExistsError を回避、親が無いなら os.makedirs(または Path.mkdir(parents=True))を使う。権限エラーにも備え、用途に応じて mkdir(単発)/makedirs(階層)/pathlib(安全・可読)を使い分ける。この基本線を守れば、初心者でもフォルダ作成まわりのコードを短く、堅牢に、実務品質で書けます。
