Python | ファイル操作など:os.mkdir

Python
スポンサーリンク

概要(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  # 既存なら何もしない(ポリシーに合わせて)
Python

FileNotFoundError(親がない)への対策

親を作るか、間違ったパスかを見直します。階層作成は os.makedirs が速いです。

import os

# 親ごと作る
os.makedirs("project/data/raw", exist_ok=True)
Python

PermissionError(権限なし)への対策

書き込み権限がない場所に作ろうとすると失敗します。ユーザーの権限を確認するか、書き込み可能なディレクトリに変更しましょう。

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(安全・可読)を使い分ける。この基本線を守れば、初心者でもフォルダ作成まわりのコードを短く、堅牢に、実務品質で書けます。

タイトルとURLをコピーしました