[Python] 階層を持ったサブフォルダをまとめて作成する方法

Pythonでは、os.makedirs()関数を使用して階層を持ったサブフォルダをまとめて作成できます。

この関数は、指定したパスに存在しないディレクトリがあれば自動的に作成してくれるため、複数の階層を一度に作成するのに便利です。

例えば、os.makedirs('parent/child/grandchild')とすると、parentフォルダが存在しない場合でも、childgrandchildと一緒に作成されます。

この記事でわかること
  • os.makedirs()の基本的な使い方
  • pathlibモジュールの活用法
  • フォルダ作成時の注意点
  • エラーハンドリングの重要性
  • クロスプラットフォーム対応の方法

目次から探す

os.makedirs()関数とは

os.makedirs()は、Pythonの標準ライブラリであるosモジュールに含まれる関数で、指定したパスに階層を持ったディレクトリを一度に作成するために使用されます。

この関数を使うことで、複数のサブフォルダを一度に作成することができ、手間を省くことができます。

os.makedirs()の基本的な使い方

os.makedirs()を使用する基本的な構文は以下の通りです。

import os
# 階層を持ったフォルダを作成
os.makedirs('親フォルダ/子フォルダ1/子フォルダ2')

このコードを実行すると、親フォルダの中に子フォルダ1、その中に子フォルダ2が作成されます。

os.mkdir()との違い

os.mkdir()は、指定したパスに単一のディレクトリを作成するための関数です。

os.makedirs()は、複数の階層を一度に作成できる点が大きな違いです。

スクロールできます
関数名説明階層の作成
os.makedirs()階層を持ったディレクトリを作成可能
os.mkdir()単一のディレクトリを作成不可

os.makedirs()の引数について

os.makedirs()には、主に2つの引数があります。

path引数

path引数は、作成したいディレクトリのパスを指定します。

相対パスまたは絶対パスを使用できます。

os.makedirs('新しいフォルダ/サブフォルダ')

exist_ok引数

exist_ok引数は、指定したパスが既に存在する場合の挙動を制御します。

デフォルトではFalseで、既存のディレクトリがあるとFileExistsErrorが発生します。

Trueに設定すると、エラーを無視して処理を続行します。

os.makedirs('既存のフォルダ', exist_ok=True)

os.makedirs()を使う際の注意点

os.makedirs()を使用する際には、いくつかの注意点があります。

  • パーミッション: フォルダを作成する際に、適切な権限が必要です。

権限がない場合、PermissionErrorが発生します。

  • パスの正確性: 指定したパスが正しいことを確認してください。

誤ったパスを指定すると、意図しない場所にフォルダが作成される可能性があります。

  • エラーハンドリング: フォルダ作成時にエラーが発生する可能性があるため、適切なエラーハンドリングを行うことが重要です。

階層を持ったサブフォルダを作成する方法

Pythonのos.makedirs()関数を使用することで、階層を持ったサブフォルダを簡単に作成できます。

以下に具体的な例を示します。

単一の階層を作成する例

単一の階層を作成する場合、os.makedirs()を使って以下のように記述します。

import os
# 単一の階層を作成
os.makedirs('新しいフォルダ')

このコードを実行すると、カレントディレクトリに新しいフォルダが作成されます。

複数階層を一度に作成する例

複数の階層を一度に作成する場合は、以下のように記述します。

import os
# 複数階層を一度に作成
os.makedirs('親フォルダ/子フォルダ1/子フォルダ2')

このコードを実行すると、親フォルダの中に子フォルダ1、その中に子フォルダ2が作成されます。

フォルダが既に存在する場合の挙動

os.makedirs()を使用して、既に存在するフォルダを指定した場合、デフォルトではFileExistsErrorが発生します。

しかし、exist_ok引数をTrueに設定することで、このエラーを回避できます。

import os
# 既存のフォルダを指定
os.makedirs('既存のフォルダ', exist_ok=True)

このコードを実行すると、既存のフォルダが存在していてもエラーは発生せず、処理が続行されます。

フォルダ作成時のエラーハンドリング

フォルダ作成時には、さまざまなエラーが発生する可能性があります。

以下に代表的なエラーとその対処法を示します。

FileExistsErrorの対処法

FileExistsErrorは、指定したパスに既にフォルダが存在する場合に発生します。

このエラーを回避するためには、exist_ok引数をTrueに設定するか、事前にフォルダの存在を確認する方法があります。

import os
# フォルダの存在を確認してから作成
if not os.path.exists('既存のフォルダ'):
    os.makedirs('既存のフォルダ')

PermissionErrorの対処法

PermissionErrorは、フォルダを作成するための権限がない場合に発生します。

このエラーを回避するためには、適切な権限を持つディレクトリにフォルダを作成するか、管理者権限でスクリプトを実行する必要があります。

import os
try:
    os.makedirs('作成したいフォルダ')
except PermissionError:
    print("フォルダを作成する権限がありません。")

このように、エラーハンドリングを行うことで、スクリプトの安定性を向上させることができます。

os.makedirs()の応用例

os.makedirs()関数は、単にフォルダを作成するだけでなく、さまざまな応用が可能です。

以下にいくつかの具体例を示します。

フォルダ作成とファイルの自動生成

フォルダを作成した後に、特定のファイルを自動的に生成することができます。

以下の例では、フォルダを作成し、その中にテキストファイルを作成します。

import os
# フォルダを作成
folder_path = '新しいフォルダ'
os.makedirs(folder_path, exist_ok=True)
# ファイルを作成
file_path = os.path.join(folder_path, 'sample.txt')
with open(file_path, 'w', encoding='utf-8') as f:
    f.write('これはサンプルファイルです。')

このコードを実行すると、新しいフォルダの中にsample.txtというファイルが作成され、その中にテキストが書き込まれます。

日付や時間に基づいたフォルダの自動作成

日付や時間に基づいてフォルダを作成することも可能です。

以下の例では、現在の日付を使ってフォルダを作成します。

import os
from datetime import datetime
# 現在の日付を取得
current_date = datetime.now().strftime('%Y-%m-%d')
folder_path = f'バックアップ_{current_date}'
# フォルダを作成
os.makedirs(folder_path, exist_ok=True)

このコードを実行すると、バックアップ_YYYY-MM-DDという形式のフォルダが作成されます。

ユーザー入力に基づくフォルダ構造の作成

ユーザーからの入力を受けて、フォルダ構造を作成することもできます。

以下の例では、ユーザーにフォルダ名を入力させ、その名前でフォルダを作成します。

import os
# ユーザーからフォルダ名を取得
folder_name = input('作成するフォルダ名を入力してください: ')
os.makedirs(folder_name, exist_ok=True)

このコードを実行すると、ユーザーが入力した名前のフォルダが作成されます。

再帰的にフォルダを削除する方法

作成したフォルダを再帰的に削除するには、shutilモジュールのrmtree()関数を使用します。

以下の例では、指定したフォルダを削除します。

import os
import shutil
# 削除したいフォルダのパス
folder_path = '削除したいフォルダ'
# フォルダを削除
if os.path.exists(folder_path):
    shutil.rmtree(folder_path)

このコードを実行すると、削除したいフォルダとその中に含まれるすべてのファイルやサブフォルダが削除されます。

注意して使用してください。

pathlibモジュールを使ったフォルダ作成

Pythonのpathlibモジュールは、ファイルシステムのパスをオブジェクト指向で扱うための便利なツールです。

pathlibを使用することで、フォルダの作成や操作がより直感的に行えます。

pathlib.Path.mkdir()の使い方

pathlibモジュールのPathクラスを使用して、フォルダを作成することができます。

mkdir()メソッドを使うことで、指定したパスに新しいディレクトリを作成します。

from pathlib import Path
# フォルダを作成
folder_path = Path('新しいフォルダ')
folder_path.mkdir(exist_ok=True)

このコードを実行すると、新しいフォルダが作成されます。

exist_ok=Trueを指定することで、既にフォルダが存在する場合でもエラーを発生させずに処理を続行します。

pathlibとosモジュールの違い

pathlibosモジュールは、どちらもファイルシステムの操作を行うためのライブラリですが、いくつかの違いがあります。

スクロールできます
特徴pathlibモジュールosモジュール
アプローチオブジェクト指向手続き型
パスの扱いPathオブジェクトを使用文字列を使用
可読性より直感的で可読性が高い文字列操作が多く可読性が低い

pathlibを使った階層フォルダの作成例

pathlibを使用して、階層を持ったフォルダを作成することも簡単です。

以下の例では、複数の階層を一度に作成します。

from pathlib import Path
# 階層を持ったフォルダを作成
folder_path = Path('親フォルダ/子フォルダ1/子フォルダ2')
folder_path.mkdir(parents=True, exist_ok=True)

このコードを実行すると、親フォルダの中に子フォルダ1、その中に子フォルダ2が作成されます。

parents=Trueを指定することで、親フォルダが存在しない場合でも自動的に作成されます。

pathlibを使ったフォルダの存在確認

pathlibを使用すると、フォルダの存在を簡単に確認できます。

以下の例では、指定したフォルダが存在するかどうかをチェックします。

from pathlib import Path
# フォルダの存在を確認
folder_path = Path('確認したいフォルダ')
if folder_path.exists():
    print('フォルダは存在します。')
else:
    print('フォルダは存在しません。')

このコードを実行すると、指定したフォルダが存在するかどうかが出力されます。

exists()メソッドを使用することで、フォルダやファイルの存在を簡単に確認できます。

サブフォルダ作成のベストプラクティス

フォルダを作成する際には、いくつかのベストプラクティスを考慮することで、より効率的で安全なプログラムを作成できます。

以下に、サブフォルダ作成に関する重要なポイントを示します。

フォルダ作成時のパスの扱い方

フォルダを作成する際には、パスの扱いが非常に重要です。

以下の点に注意してください。

  • パスの正確性: 指定するパスが正しいことを確認しましょう。

誤ったパスを指定すると、意図しない場所にフォルダが作成される可能性があります。

  • パスの結合: os.path.join()pathlibPathオブジェクトを使用して、パスを結合することで、プラットフォームに依存しないパスを作成できます。
import os
# パスの結合
folder_path = os.path.join('親フォルダ', '子フォルダ')
os.makedirs(folder_path, exist_ok=True)

絶対パスと相対パスの違い

  • 絶対パス: ルートディレクトリからの完全なパスを指定します。

どのディレクトリから実行しても同じ場所を指します。

  • 例: /home/user/プロジェクト/フォルダ
  • 相対パス: 現在の作業ディレクトリからの相対的な位置を指定します。

実行する場所によって異なるフォルダを指すことがあります。

  • 例: ./フォルダ(現在のディレクトリ内のフォルダ)

相対パスを使用する場合は、カレントディレクトリを意識する必要があります。

クロスプラットフォーム対応のための注意点

異なるオペレーティングシステム(Windows、macOS、Linux)で動作するプログラムを作成する際には、以下の点に注意が必要です。

  • パス区切り文字: Windowsではバックスラッシュ\、Unix系ではスラッシュ/が使用されます。

os.path.join()pathlibを使用することで、これを自動的に処理できます。

  • ファイル名の制約: 各OSにはファイル名に使用できない文字があるため、これに注意してフォルダ名を決定する必要があります。

フォルダ作成時のパーミッション設定

フォルダを作成する際には、適切なパーミッションを設定することが重要です。

特に、共有環境やサーバー上での作業では、他のユーザーがアクセスできるかどうかを考慮する必要があります。

  • デフォルトのパーミッション: os.makedirs()pathlib.Path.mkdir()を使用する際、デフォルトではシステムの設定に従ったパーミッションが適用されます。
  • カスタムパーミッション: os.chmod()を使用して、作成したフォルダのパーミッションを変更することができます。
import os
import stat
# フォルダを作成
folder_path = '新しいフォルダ'
os.makedirs(folder_path, exist_ok=True)
# パーミッションを変更(例: 読み取り・書き込み・実行権限を付与)
os.chmod(folder_path, stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO)

このように、フォルダ作成時のパーミッション設定を適切に行うことで、セキュリティを強化することができます。

よくある質問

os.makedirs()で既存のフォルダを上書きできますか?

os.makedirs()は、既存のフォルダを上書きすることはできません。

デフォルトでは、指定したパスに既にフォルダが存在する場合、FileExistsErrorが発生します。

ただし、exist_ok引数をTrueに設定することで、既存のフォルダがあってもエラーを無視して処理を続行することができます。

例:os.makedirs('既存のフォルダ', exist_ok=True)

os.makedirs()でファイル名を指定するとどうなりますか?

os.makedirs()はディレクトリを作成するための関数であり、ファイル名を指定してもフォルダは作成されません。

指定したパスがファイル名であった場合、FileExistsErrorが発生します。

したがって、os.makedirs()を使用する際は、必ずディレクトリ名を指定する必要があります。

os.makedirs()とpathlib.Path.mkdir()のどちらを使うべきですか?

os.makedirs()pathlib.Path.mkdir()はどちらもフォルダを作成するための関数ですが、選択は使用する状況によります。

  • os.makedirs(): 既存のフォルダを無視して複数階層を一度に作成したい場合に便利です。

特に、古いコードや他のosモジュールの機能と一緒に使用する場合に適しています。

  • pathlib.Path.mkdir(): オブジェクト指向のアプローチを好む場合や、パスの操作をより直感的に行いたい場合に適しています。

また、pathlibはファイルやディレクトリの操作をより簡潔に行えるため、可読性が高いです。

最終的には、プロジェクトのスタイルや要件に応じて選択することが重要です。

まとめ

この記事では、Pythonのos.makedirs()関数pathlibモジュールを使用して階層を持ったサブフォルダを作成する方法について詳しく解説しました。

また、フォルダ作成時のベストプラクティスやエラーハンドリングの重要性についても触れました。

これらの知識を活用することで、より効率的で安全なフォルダ管理が可能になりますので、ぜひ実際のプロジェクトに取り入れてみてください。

  • URLをコピーしました!
目次から探す