[Python] 階層を持ったサブフォルダをまとめて作成する方法
Pythonでは、os.makedirs()関数
を使用して階層を持ったサブフォルダをまとめて作成できます。
この関数は、指定したパスに存在しないディレクトリがあれば自動的に作成してくれるため、複数の階層を一度に作成するのに便利です。
例えば、os.makedirs('parent/child/grandchild')
とすると、parent
フォルダが存在しない場合でも、child
やgrandchild
と一緒に作成されます。
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モジュールの違い
pathlib
とos
モジュールは、どちらもファイルシステムの操作を行うためのライブラリですが、いくつかの違いがあります。
特徴 | 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()
やpathlib
のPath
オブジェクトを使用して、パスを結合することで、プラットフォームに依存しないパスを作成できます。
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)
このように、フォルダ作成時のパーミッション設定を適切に行うことで、セキュリティを強化することができます。
まとめ
この記事では、Pythonのos.makedirs()関数
やpathlib
モジュールを使用して階層を持ったサブフォルダを作成する方法について詳しく解説しました。
また、フォルダ作成時のベストプラクティスやエラーハンドリングの重要性についても触れました。
これらの知識を活用することで、より効率的で安全なフォルダ管理が可能になりますので、ぜひ実際のプロジェクトに取り入れてみてください。