【Python】フォルダ作成の方法を初心者向けに解説:os.mkdirやpathlib.Pathを使いこなそう

はじめに

Pythonでプログラムを作成しているとき、ファイルやデータを整理するために新しいフォルダ(ディレクトリ)を作成したい場面は多いです。テキストファイルの保存場所を分けたり、画像やログをカテゴリーごとに仕分けしたり、ユーザーごとの設定ファイルを作るといったケースも少なくありません。

フォルダを自動生成してくれるスクリプトを書いておけば、作業の手間を減らすだけでなく、手動でフォルダを作る時にありがちなミスを防ぐことができます。複数の環境を行き来する開発プロジェクトであれば、ファイルパスの違いやOSによるパス表記の差異に対処しなければならず、フォルダ作成の方法をしっかり理解しているかどうかがトラブル回避の鍵にもなります。

今回の記事では、Pythonでのフォルダ作成に焦点をあて、シンプルな方法から応用的な使い方までを丁寧に解説します。初心者向けにわかりやすく書いていますので、Pythonの基本的な文法さえ知っていれば問題なく理解できるはずです。なお、コード例をいくつか示しますが、すべて実際に実行して使える形となっています。フォルダのパスや名前を変更するだけでさまざまなシーンに応用できますので、ぜひ活用してみてください。

実務では、ログを日付ごとに保存するフォルダ構成を自動生成したり、アプリケーションインストール時に環境設定用のフォルダを確保したりするといったケースがあります。こうした作業をPythonで自動化できると、運用負荷を減らしミスを減らす効果が期待できます。プログラミング未経験者や初心者の方でも理解しやすいように解説を進めますので、一緒にフォルダ作成の基本を身につけていきましょう。

この記事を読むとわかること

  • Pythonでフォルダを作成する複数の方法を理解できる
  • 実務におけるフォルダ作成の活用シーンがイメージできる
  • エラー処理やパス指定のコツなどを押さえられる
  • os.mkdir、os.makedirs、pathlib.Pathなどの使い分けを学べる

フォルダ作成のニーズを深掘りする

フォルダを作成したいというニーズには、さまざまな場面が考えられます。たとえば、毎日生成されるレポートやログを整理したいときに、自動的に「2023-01-01」「2023-01-02」といった日付フォルダを作るかもしれません。あるいは、ユーザー登録をしているシステムで、ユーザーごとのIDを名前にしたフォルダを動的に用意したいケースもあるでしょう。

こうしたニーズに対しては、Pythonでフォルダを作成するだけではなく、どのようにパスを管理し、どのようにエラーハンドリングを行うかも重要になってきます。初心者の方が気をつけるべきポイントとしては、パスの区切り文字(Windowsだと \、macOSやLinuxだと /)の違いなどがあります。Pythonにはこうした差異を吸収する標準ライブラリや便利な機能が用意されていますので、それらをうまく使うことが大切です。

また、フォルダを一つだけ作るか、階層構造をまとめて作るかという違いも存在します。たとえば「images」というフォルダの中に「thumbnails」と「originals」というサブフォルダをまとめて作りたい場合があります。その際、従来の os.mkdir だけだと、途中のフォルダがないとエラーになりますが、 os.makedirspathlib.Path.mkdir の引数設定を活用することで、一度に階層を作成できます。これらの機能を使い分けると、実務でのファイル管理がスムーズになるでしょう。

フォルダ作成の検索意図を満たすには

初心者の皆さんが「フォルダ作成」に関する情報を求める理由としては、Pythonを使って業務や学習の自動化を図りたい、もしくは基本的な操作をマスターしたいという目的が多いと考えられます。ここで満たすべき検索意図は以下のような要素です。

具体的なコード例を見たい

「何をインポートすればいいのか」「どのメソッドを呼べばいいのか」が明確であると学習がはかどります。

異なるOSでのフォルダ作成も含め、汎用的に動くコードを知りたい

WindowsとmacOSやLinuxではパスの指定方法が異なるため、どんな書き方をすると互換性が高いか気になる方が多いです。

エラーが出たときの対処方法も一緒に知りたい

フォルダがすでに存在しているときにどのように処理を進めるのか、例外はどう扱うのかといった情報も重要です。

実務での具体的な活用シーンをイメージしたい

どのような場面で自動化やスクリプト化を行うと便利なのかがわかると、実践でのモチベーションにつながります。

これらを意識して解説記事を作ることで、初心者の方が抱える疑問をしっかりカバーできるはずです。以下の章では実際のコード例を交えながら、Pythonによるフォルダ作成を段階的に説明します。

フォルダ作成を行うための準備

Pythonでフォルダを扱うには、主に os モジュールと pathlib モジュールを利用するパターンがあります。どちらも標準ライブラリなので追加インストールの必要はなく、Pythonをインストールすればすぐに使うことができます。

osモジュール は、古くからあるPythonの標準機能で、ファイルやディレクトリを操作するための基本的なメソッドをそろえています。一方、 pathlibモジュール は、よりオブジェクト指向的な書き方やプラットフォームの差異を吸収しやすい仕組みを提供してくれます。Python初心者は、まずはosモジュールの os.mkdir あたりから始めることが多いですが、今後長くコードを書いていくならpathlibの習得もおすすめです。

準備段階としては、あらかじめ作りたいフォルダのパスを決定しておくとスムーズです。たとえば、sample_folder という名前のフォルダを、作業しているスクリプトと同じディレクトリに作成するなら単純に sample_folder と書くだけでOKです。もし絶対パスで指定したい場合は、たとえば Windowsだと r"C:\work\sample_folder", macOSやLinuxなら "/Users/username/work/sample_folder" のようにパスを書きます。

os.mkdirによる単一フォルダ作成

Pythonでフォルダを一つだけ作成したい場合は、 os.mkdir を利用するとわかりやすいです。ポイントは、既に同じ名前のフォルダがあるとエラーが発生する点と、フォルダのパスに誤りがあるとエラーになる点です。以下のコード例を見てみましょう。

import os

folder_name = "test_folder"
os.mkdir(folder_name)
print("フォルダを作成しました:", folder_name)

上記のコードは、現在のスクリプトと同じ階層に test_folder という名前のフォルダを作ります。もしこれと同名のフォルダがすでに存在する場合は、 FileExistsError が発生します。これを回避したいときは、次に解説する os.makedirs を使うか、あるいはエラーハンドリングで存在チェックを行う方法があります。

実務では、エラーが出たらログを残してプログラムを止めるのか、またはスキップして進むのかを検討しておく必要があります。開発プロジェクトごとに要件が異なるので、フォルダが存在した時の動作をどう設計するかは大事なポイントになります。

os.makedirsによる階層フォルダの一括作成

複数階層のフォルダをまとめて作るなら、 os.makedirs が便利です。途中のフォルダが存在しない場合も自動的に生成してくれるので、手動で一階層ずつ作る手間が省けます。たとえば、以下の例を見てください。

import os

multi_folder_path = "project/data/images"
os.makedirs(multi_folder_path)
print("多階層のフォルダを作成しました:", multi_folder_path)

このコードを実行すると、 projectdataimages のように階層を含めたフォルダ構成が一度に作成されます。ただし、すでにどこかの階層が存在している場合でも問題なく処理は進む点に注意が必要です。つまり、 project フォルダがあれば dataimages だけが作られます。

もしフォルダがすでに存在している場合にエラーを出したくないなら、 os.makedirs(multi_folder_path, exist_ok=True) とするとエラーは起きません。これは実務でログの保存先を日付フォルダとして毎日作るようなケースで多用されます。ファイルを書き出す直前に自動でディレクトリを用意してくれると、ミスが減って便利です。

pathlib.Pathを使ったフォルダ作成

Python 3系では、ファイルやフォルダのパスをオブジェクトとして取り扱う pathlib モジュールを使う方法もあります。 Path クラスを利用すると、処理が直感的になり、パス結合も演算子( / )で書けるようになります。

以下のコード例では、 Path("my_data") という書き方でパスを指定し、メソッドとして .mkdir() を呼ぶことでフォルダ作成を実行しています。

from pathlib import Path

folder_path = Path("my_data")
folder_path.mkdir()
print("フォルダを作成しました:", folder_path)

さらに、途中の階層ごと作成したい場合は、 mkdirparents=True を指定し、すでに存在してもエラーにしたくない場合は exist_ok=True を指定します。たとえば下記のように書くと便利です。

from pathlib import Path

nested_path = Path("my_project/sub_folder")
nested_path.mkdir(parents=True, exist_ok=True)
print("多階層フォルダを作成しました:", nested_path)

このように記述することで、 my_project が存在しないときもまとめて作成でき、すでに同名のフォルダがある場合でもエラーなくスキップ可能です。WindowsやmacOS、LinuxなどOSが異なってもパス区切りを意識しなくて済むため、実務でのポータビリティが高まる利点があります。

実務での活用シーン

フォルダ作成は単なる基礎知識に思えるかもしれませんが、実務ではさまざまなシーンで必要になります。ログファイルやレポートを毎日生成するスクリプトを作るとき、フォルダを日付で分割しておけば、後から参照するときにとても分かりやすくなります。あるいは、ユーザー名やユーザーIDを含んだフォルダを動的に作り、ユーザーごとのデータを安全に分離する方法もよく使われます。

また、Dockerなどコンテナ環境下で自動デプロイする場合、必要なディレクトリをあらかじめスクリプトで作っておくと、本番環境と開発環境でフォルダ構成の違いが出にくくなる利点があります。CI/CDのパイプラインからPythonスクリプトを呼び出して、デプロイ前に必要なフォルダを準備するフローを組むことも可能です。

さらに、画像認識などの処理を行う際にフォルダ構成が複雑になるケースでは、データをクラス別に整理したり、前処理済みデータを格納する場所を用意したりといった形で、フォルダ作成処理がとても役立ちます。こうした場面で、 os.makedirsPath.mkdir を柔軟に使い分けられると、管理がずっと楽になります。

エラー対策と存在チェック

フォルダ作成でよくあるエラーとしては、指定したパスがすでに存在しているケースのほか、パス文字列に問題があるケース、アクセス権限が不足しているケースなどが挙げられます。特にWindowsであれば使用できない文字( :*?"<>| など)がフォルダ名に含まれているとエラーになりますし、macOSやLinuxでも先頭にドットが入っているフォルダをどう扱うかなど注意点があります。

フォルダ名に特殊文字を含むと、環境によっては予期せぬエラーが起こりやすいです。日本語やスペースを使う場合も、極力シンプルな文字列を心がけると良いでしょう。

また、実務で権限エラーに遭遇した際は、管理者権限でディレクトリを作り直すか、パーミッションを見直す必要があります。Linux系サーバーの場合は、 chmodchown コマンドを用いて所有者やアクセス権限を変更するのが一般的です。Python側でできる対策としては、フォルダ作成処理の前に os.accessPath.is_dir() でディレクトリの存在と書き込み権限を確認しておく方法が挙げられます。

import os
from pathlib import Path

test_path = Path("restricted_folder")

# 既に存在しないかチェック
if not test_path.is_dir():
    try:
        test_path.mkdir()
        print("新しいフォルダを作成しました:", test_path)
    except PermissionError:
        print("権限がありません:", test_path)
    except OSError as e:
        print("その他のエラー:", e)
else:
    print("フォルダは既に存在します:", test_path)

上記の例では、あらかじめ is_dir() で存在チェックを行い、新規作成が必要なら try-except で権限エラーとその他のエラーを分けて処理しています。実際の運用ではログファイルにエラー内容を記録するなどの工夫も行うと、トラブルシューティングが容易になります。

WindowsとmacOS/Linuxの差異

フォルダ作成自体のメソッドは同じように使えますが、Pythonを使う際に注意すべきは「パスの区切り文字」です。Windowsではバックスラッシュ \ がデフォルトですが、macOSやLinuxではスラッシュ / になります。OSをまたいで同じスクリプトを走らせるとき、パスの書き方が違うと動作しない場合があります。

しかし、 os.pathpathlib を使えば、そのあたりの差異をかなり軽減することができます。 os.path.join("folder", "subfolder") と書けば、Windowsなら folder\subfolder、macOSやLinuxなら folder/subfolder と自動的に切り替わります。 pathlib の場合は、 Path("folder") / "subfolder" という演算子でつなぐだけなので、コードが分かりやすくなるメリットもあります。

つまり、WindowsでもmacOSでも、Pythonコードの書き方を工夫すれば同じ感覚でフォルダ作成が可能になります。特にマルチプラットフォームでサービスを運用する場合、pathlibは視認性や拡張性を高めてくれるため、実務レベルでも選択肢に入れておくと良いでしょう。

自動生成スクリプトの活用例

ここでは、日付フォルダを自動生成して、その中にファイルを保存する簡単な例を示します。たとえば、日次レポートや日次ログを整理する用途で使えます。

import os
from datetime import datetime

today_str = datetime.now().strftime("%Y-%m-%d")
folder_name = f"logs_{today_str}"

os.makedirs(folder_name, exist_ok=True)

file_path = os.path.join(folder_name, "log.txt")
with open(file_path, "w", encoding="utf-8") as f:
    f.write("本日のログをここに記録します。")

print(f"{folder_name} フォルダと log.txt ファイルを自動作成しました。")

このコードを毎日実行すると、たとえば logs_2025-02-16 というフォルダが生成され、中に log.txt が作られます。すでに同じフォルダがある場合は、 exist_ok=True のおかげでエラーにならずスキップします。現場では、ログの種類ごとにファイル名を変えたり、階層をさらに追加して管理するなど、さまざまなカスタマイズが考えられるでしょう。

チーム開発での注意点

実務で複数人が同じPythonコードを使う場合、フォルダのパス設定がプロジェクトによって異なることに注意が必要です。ローカル開発環境でしか通用しない絶対パスをハードコーディングすると、別の環境ではエラーになるかもしれません。そのため、設定ファイルや環境変数を使って、フォルダパスを外部から指定する仕組みを設けることがあります。

チームで運用するなら、 pathlib.Path を使った相対パスの管理や、環境変数を参照する仕組みを取り入れると良いでしょう。そうすることで、コードを修正しなくてもフォルダ作成先を動的に変えられ、各メンバーの環境に合わせて柔軟に動作させられます。CI環境でも同じスクリプトを実行してファイルを生成するケースも考えられますので、ハードコーディングはなるべく避けるのがおすすめです。

複数人が同じスクリプトを使う場合、フォルダ構成をプロジェクトルートからの相対パスで統一すると混乱が少なくなります。ハードコーディングされた絶対パスは環境依存のトラブルを引き起こしがちです。

パス操作を効率化するポイント

フォルダ作成ができるようになったら、関連するファイルパス操作のテクニックも併せて押さえておくと便利です。たとえば、フォルダの一覧を取得したり、特定のファイル拡張子(たとえば .txt)のファイルだけを抽出したりするといった機能です。以下では、 ospathlib を組み合わせた例を示します。

import os
from pathlib import Path

# フォルダ内のサブフォルダとファイル一覧を取得
root_path = Path("my_project")
if root_path.is_dir():
    for item in root_path.iterdir():
        if item.is_dir():
            print("フォルダ:", item.name)
        elif item.is_file():
            print("ファイル:", item.name)

# 特定拡張子のファイルをまとめて取得
txt_files = list(root_path.glob("**/*.txt"))
for txt_file in txt_files:
    print("テキストファイルのパス:", txt_file)

このように、フォルダ作成だけでなく、フォルダの中身をチェックする仕組みを作れると、必要なデータをスキャンしたり一括処理したりする段階で非常に役立ちます。これもまた、実務の自動化スクリプトで多用される手法です。ファイル操作の基本を身につけることで、より大きなプロジェクトでも柔軟に対応できるようになるでしょう。

デバッグとログ管理のコツ

フォルダが作られない、あるいは意図しない場所に作られてしまうといった問題が起きたときは、デバッグのために現在の作業ディレクトリを確認するのが有用です。Pythonでは os.getcwd() でカレントディレクトリを取得でき、そこからの相対パスでフォルダを作っている場合は、この値が違うと想定外の場所にフォルダが作られることがあります。

また、実務ではフォルダ作成やファイル操作などの処理を行ったタイミングをログに記録しておくと、後で不具合が発生したときに原因を追いやすくなります。ログファイル自体を作成し、日時や操作したパスを記録する方法が多いですが、小規模なスクリプトなら print 文での出力でも十分な場合があります。いずれにしても、どこで何が行われたかを明確にしておくことが重要です。

まとめ

ここまで、Pythonでフォルダを作成する方法を一通りご紹介しました。os.mkdiros.makedirs を使った古典的なやり方から、 pathlib.Path.mkdir を使ったオブジェクト指向的なアプローチまで幅広くカバーしてきました。それぞれ以下の特徴があります。

os.mkdir

単一のフォルダを作成するときに使いやすい
すでに存在している場合はエラーになる

os.makedirs

階層構造をまとめて作れる
exist_ok=True を指定すると同名フォルダがあってもエラーにならない

pathlib.Path.mkdir

パスの区切り文字を意識しなくても良い柔軟な書き方
parents=True で中間フォルダも作成可能、 exist_ok=True で重複回避

フォルダ作成は一見すると地味な作業ですが、ログ管理やユーザーデータ管理など多くの実務シーンで必要になる基本的な機能です。今回の内容を踏まえて、Pythonスクリプトの中で効率よくフォルダを生成できるようになると、アプリケーション開発やデータ解析がよりスムーズになるでしょう。皆さんもぜひ、サンプルコードを実行したり、さまざまなフォルダ構成を試したりして、自分のプロジェクトに合わせたベストなやり方を探してみてください。

Pythonをマスターしよう

この記事で学んだPythonの知識をさらに伸ばしませんか?
Udemyには、現場ですぐ使えるスキルを身につけられる実践的な講座が揃っています。