[Python] 指定したフォルダに新しいフォルダを作成する方法
Pythonで指定したフォルダに新しいフォルダを作成するには、標準ライブラリのosモジュールやpathlibモジュールを使用します。
osモジュールではos.makedirs()やos.mkdir()を使い、pathlibモジュールではPath.mkdir()を使います。
os.makedirs()は、親ディレクトリが存在しない場合でも再帰的に作成できる点が特徴です。
pathlibはPython 3.4以降で利用可能で、オブジェクト指向的な操作が可能です。
osモジュールを使ったフォルダ作成方法
Pythonのosモジュールを使用すると、フォルダの作成や管理が簡単に行えます。
ここでは、os.mkdir()とos.makedirs()を使ったフォルダ作成の方法について解説します。
os.mkdir()の使い方
os.mkdir()は、指定したパスに新しいフォルダを作成するための関数です。
以下はその基本的な使い方です。
import os
# 新しいフォルダのパス
folder_path = "新しいフォルダ"
# フォルダを作成
os.mkdir(folder_path)
print(f"{folder_path}を作成しました。")新しいフォルダを作成しました。os.mkdir()は、指定したパスにフォルダが存在しない場合にのみ新しいフォルダを作成します。
os.makedirs()の使い方
os.makedirs()は、指定したパスに複数のフォルダを一度に作成するための関数です。
親フォルダが存在しない場合でも、必要なフォルダをすべて作成します。
import os
# 新しいフォルダのパス(親フォルダも含む)
folder_path = "親フォルダ/子フォルダ"
# フォルダを作成
os.makedirs(folder_path)
print(f"{folder_path}を作成しました。")親フォルダ/子フォルダを作成しました。このように、os.makedirs()を使うことで、階層構造を持つフォルダを一度に作成できます。
os.mkdir()とos.makedirs()の違い
| 関数名 | 説明 | 使用例 |
|---|---|---|
| os.mkdir() | 指定したパスに1つのフォルダを作成 | os.mkdir("新しいフォルダ") |
| os.makedirs() | 指定したパスに複数のフォルダを作成 | os.makedirs("親/子") |
os.mkdir()は単一のフォルダを作成するのに対し、os.makedirs()は複数のフォルダを一度に作成することができます。
フォルダが既に存在する場合の対処法
フォルダを作成しようとした際に、指定したパスに既にフォルダが存在する場合、FileExistsErrorが発生します。
このエラーを回避するためには、フォルダの存在を確認してから作成する方法があります。
import os
folder_path = "新しいフォルダ"
# フォルダが存在しない場合のみ作成
if not os.path.exists(folder_path):
os.mkdir(folder_path)
print(f"{folder_path}を作成しました。")
else:
print(f"{folder_path}は既に存在します。")新しいフォルダは既に存在します。このように、os.path.exists()を使ってフォルダの存在を確認することで、エラーを防ぐことができます。
パーミッションエラーの対処法
フォルダを作成する際に、パーミッションエラーが発生することがあります。
これは、指定したパスにフォルダを作成する権限がない場合に起こります。
このエラーを処理するためには、try-except文を使用します。
import os
folder_path = "新しいフォルダ"
try:
os.mkdir(folder_path)
print(f"{folder_path}を作成しました。")
except PermissionError:
print(f"{folder_path}を作成する権限がありません。")
except FileExistsError:
print(f"{folder_path}は既に存在します。")新しいフォルダを作成する権限がありません。このように、try-except文を使うことで、パーミッションエラーやその他のエラーを適切に処理することができます。
pathlibモジュールを使ったフォルダ作成方法
Pythonのpathlibモジュールは、ファイルシステムのパスをオブジェクト指向で扱うための便利なツールです。
ここでは、pathlibを使ったフォルダ作成の方法について解説します。
Pathオブジェクトの基本
pathlibモジュールでは、Pathクラスを使用してファイルやフォルダのパスを表現します。
Pathオブジェクトを作成することで、パスに対するさまざまな操作が可能になります。
from pathlib import Path
# Pathオブジェクトの作成
folder_path = Path("新しいフォルダ")
print(folder_path)新しいフォルダこのように、Pathオブジェクトを作成することで、パスを簡単に扱うことができます。
Path.mkdir()の使い方
Pathオブジェクトのmkdir()メソッドを使用すると、新しいフォルダを作成できます。
以下はその基本的な使い方です。
from pathlib import Path
# 新しいフォルダのPathオブジェクト
folder_path = Path("新しいフォルダ")
# フォルダを作成
folder_path.mkdir()
print(f"{folder_path}を作成しました。")新しいフォルダを作成しました。mkdir()メソッドは、指定したパスにフォルダが存在しない場合にのみ新しいフォルダを作成します。
parentsオプションを使った再帰的なフォルダ作成
mkdir()メソッドにはparentsオプションがあり、これをTrueに設定することで、親フォルダが存在しない場合でも再帰的にフォルダを作成できます。
from pathlib import Path
# 新しいフォルダのPathオブジェクト(親フォルダも含む)
folder_path = Path("親フォルダ/子フォルダ")
# フォルダを再帰的に作成
folder_path.mkdir(parents=True)
print(f"{folder_path}を作成しました。")親フォルダ/子フォルダを作成しました。このように、parents=Trueを指定することで、必要な親フォルダも自動的に作成されます。
exist_okオプションを使ったエラー回避
mkdir()メソッドにはexist_okオプションもあり、これをTrueに設定することで、フォルダが既に存在する場合でもエラーを発生させずに処理を続行できます。
from pathlib import Path
# 新しいフォルダのPathオブジェクト
folder_path = Path("新しいフォルダ")
# フォルダを作成(既に存在してもエラーを発生させない)
folder_path.mkdir(exist_ok=True)
print(f"{folder_path}を作成しました。")新しいフォルダを作成しました。このように、exist_ok=Trueを指定することで、フォルダが既に存在する場合でもエラーを回避できます。
pathlibとosモジュールの違い
| 特徴 | pathlibモジュール | osモジュール |
|---|---|---|
| オブジェクト指向 | はい | いいえ |
| パスの表現 | Pathオブジェクト | 文字列 |
| フォルダ作成方法 | Path.mkdir() | os.mkdir() |
| 再帰的作成 | parents=Trueオプション | os.makedirs() |
| エラー回避 | exist_ok=Trueオプション | os.path.exists()で確認 |
pathlibはオブジェクト指向でパスを扱うため、より直感的で使いやすいのが特徴です。
一方、osモジュールは従来の方法で、文字列を使ってパスを管理します。
用途に応じて使い分けることが重要です。
フォルダ作成時のエラーハンドリング
フォルダを作成する際には、さまざまなエラーが発生する可能性があります。
ここでは、フォルダ作成時のエラーハンドリングについて解説します。
フォルダが既に存在する場合のエラー処理
フォルダを作成しようとした際に、指定したパスに既にフォルダが存在する場合、FileExistsErrorが発生します。
このエラーを適切に処理するためには、try-except文を使用します。
import os
folder_path = "新しいフォルダ"
try:
os.mkdir(folder_path)
print(f"{folder_path}を作成しました。")
except FileExistsError:
print(f"{folder_path}は既に存在します。")新しいフォルダは既に存在します。このように、FileExistsErrorを捕捉することで、フォルダが既に存在する場合のエラーを適切に処理できます。
パーミッションエラーの処理方法
フォルダを作成する際に、パーミッションエラーが発生することがあります。
これは、指定したパスにフォルダを作成する権限がない場合に起こります。
このエラーもtry-except文を使って処理します。
import os
folder_path = "/root/新しいフォルダ" # 権限がないパス
try:
os.mkdir(folder_path)
print(f"{folder_path}を作成しました。")
except PermissionError:
print(f"{folder_path}を作成する権限がありません。")/root/新しいフォルダを作成する権限がありません。このように、PermissionErrorを捕捉することで、権限がない場合のエラーを適切に処理できます。
その他の例外処理
フォルダ作成時には、FileNotFoundErrorやOSErrorなど、他にもさまざまな例外が発生する可能性があります。
これらの例外もtry-except文を使って処理することができます。
import os
folder_path = "無効なパス/新しいフォルダ" # 無効なパス
try:
os.mkdir(folder_path)
print(f"{folder_path}を作成しました。")
except FileExistsError:
print(f"{folder_path}は既に存在します。")
except PermissionError:
print(f"{folder_path}を作成する権限がありません。")
except FileNotFoundError:
print(f"{folder_path}の親フォルダが存在しません。")
except OSError as e:
print(f"エラーが発生しました: {e}")無効なパス/新しいフォルダの親フォルダが存在しません。このように、さまざまな例外を捕捉することで、フォルダ作成時のエラーを適切に処理し、プログラムの安定性を向上させることができます。
応用例:フォルダ作成とファイル操作の組み合わせ
フォルダを作成した後、ファイル操作を行うことで、より実用的なプログラムを作成できます。
ここでは、フォルダ作成後にファイルを操作する方法について解説します。
フォルダ作成後にファイルを作成する方法
フォルダを作成した後、そのフォルダ内に新しいファイルを作成する方法を紹介します。
import os
# 新しいフォルダのパス
folder_path = "新しいフォルダ"
file_name = "新しいファイル.txt"
# フォルダを作成
os.mkdir(folder_path)
# フォルダ内にファイルを作成
file_path = os.path.join(folder_path, file_name)
with open(file_path, 'w', encoding='utf-8') as file:
file.write("これは新しいファイルです。")
print(f"{file_path}を作成しました。")新しいフォルダ/新しいファイル.txtを作成しました。このように、os.mkdir()でフォルダを作成した後、open()関数を使ってそのフォルダ内にファイルを作成できます。
フォルダ作成後にファイルを移動する方法
作成したフォルダにファイルを移動する方法を紹介します。
import os
import shutil
# フォルダとファイルのパス
source_file = "元のファイル.txt"
destination_folder = "新しいフォルダ"
# 元のファイルを作成
with open(source_file, 'w', encoding='utf-8') as file:
file.write("これは元のファイルです。")
# フォルダを作成
os.mkdir(destination_folder)
# ファイルを移動
shutil.move(source_file, os.path.join(destination_folder, source_file))
print(f"{source_file}を{destination_folder}に移動しました。")元のファイル.txtを新しいフォルダに移動しました。shutil.move()を使うことで、指定したフォルダにファイルを移動できます。
フォルダ作成後にファイルをコピーする方法
フォルダを作成した後、そのフォルダにファイルをコピーする方法を紹介します。
import os
import shutil
# フォルダとファイルのパス
source_file = "元のファイル.txt"
destination_folder = "新しいフォルダ"
# 元のファイルを作成
with open(source_file, 'w', encoding='utf-8') as file:
file.write("これは元のファイルです。")
# フォルダを作成
os.mkdir(destination_folder)
# ファイルをコピー
shutil.copy(source_file, os.path.join(destination_folder, source_file))
print(f"{source_file}を{destination_folder}にコピーしました。")元のファイル.txtを新しいフォルダにコピーしました。shutil.copy()を使うことで、指定したフォルダにファイルをコピーできます。
フォルダ作成後にファイルを削除する方法
作成したフォルダ内のファイルを削除する方法を紹介します。
import os
# フォルダとファイルのパス
folder_path = "新しいフォルダ"
file_name = "新しいファイル.txt"
# フォルダを作成
os.mkdir(folder_path)
# フォルダ内にファイルを作成
file_path = os.path.join(folder_path, file_name)
with open(file_path, 'w', encoding='utf-8') as file:
file.write("これは新しいファイルです。")
# ファイルを削除
os.remove(file_path)
print(f"{file_path}を削除しました。")新しいフォルダ/新しいファイル.txtを削除しました。os.remove()を使うことで、指定したファイルを削除できます。
このように、フォルダ作成後にファイルを操作することで、さまざまなファイル管理が可能になります。
応用例:日付や時間を使ったフォルダ名の自動生成
日付や時間を使ってフォルダ名を自動生成することで、整理されたフォルダ構造を作成することができます。
ここでは、datetimeモジュールを使用してフォルダ名を生成する方法について解説します。
datetimeモジュールを使ったフォルダ名の生成
datetimeモジュールを使用すると、現在の日付や時間を取得し、それをフォルダ名に組み込むことができます。
以下はその基本的な使い方です。
from datetime import datetime
import os
# 現在の日付と時間を取得
now = datetime.now()
# フォルダ名を生成(例: "2023-10-01_15-30")
folder_name = now.strftime("%Y-%m-%d_%H-%M")
# フォルダを作成
os.mkdir(folder_name)
print(f"{folder_name}を作成しました。")2023-10-01_15-30を作成しました。このように、strftime()メソッドを使ってフォルダ名をフォーマットすることができます。
フォルダ名にタイムスタンプを追加する方法
フォルダ名にタイムスタンプを追加することで、特定の時点を示すフォルダを作成できます。
以下はその方法です。
from datetime import datetime
import os
# 現在の日付と時間を取得
now = datetime.now()
# フォルダ名を生成(例: "backup_2023-10-01_15-30")
folder_name = f"backup_{now.strftime('%Y-%m-%d_%H-%M')}"
# フォルダを作成
os.mkdir(folder_name)
print(f"{folder_name}を作成しました。")backup_2023-10-01_15-30を作成しました。このように、フォルダ名にプレフィックスを追加することで、フォルダの目的を明確にすることができます。
フォルダ名に日付を追加する方法
フォルダ名に日付だけを追加することで、日付ごとの整理が可能になります。
以下はその方法です。
from datetime import datetime
import os
# 現在の日付を取得
today = datetime.now()
# フォルダ名を生成(例: "2023-10-01")
folder_name = today.strftime("%Y-%m-%d")
# フォルダを作成
os.mkdir(folder_name)
print(f"{folder_name}を作成しました。")2023-10-01を作成しました。このように、日付だけを使ったフォルダ名を生成することで、日付ごとのデータ整理が容易になります。
これらの方法を組み合わせることで、より柔軟なフォルダ名の生成が可能です。
応用例:複数のフォルダを一括で作成する方法
複数のフォルダを一括で作成することで、効率的にフォルダ構造を整えることができます。
ここでは、ループやリストを使った方法、さらに再帰的にフォルダ構造を作成する方法について解説します。
ループを使った複数フォルダの作成
ループを使用して、同じ親フォルダ内に複数のフォルダを作成する方法を紹介します。
import os
# 親フォルダのパス
parent_folder = "親フォルダ"
# 親フォルダを作成
os.mkdir(parent_folder)
# 作成するフォルダ名のリスト
folder_names = ["フォルダ1", "フォルダ2", "フォルダ3"]
# ループを使ってフォルダを作成
for folder_name in folder_names:
os.mkdir(os.path.join(parent_folder, folder_name))
print(f"{parent_folder}/{folder_name}を作成しました。")親フォルダ/フォルダ1を作成しました。
親フォルダ/フォルダ2を作成しました。
親フォルダ/フォルダ3を作成しました。このように、ループを使うことで、複数のフォルダを簡単に作成できます。
フォルダ名のリストを使った一括作成
フォルダ名をリストで管理し、そのリストを使って一括でフォルダを作成する方法を紹介します。
import os
# 親フォルダのパス
parent_folder = "親フォルダ"
# 親フォルダを作成
os.mkdir(parent_folder)
# 作成するフォルダ名のリスト
folder_names = ["2023年10月", "2023年11月", "2023年12月"]
# フォルダ名のリストを使って一括作成
for folder_name in folder_names:
os.mkdir(os.path.join(parent_folder, folder_name))
print(f"{parent_folder}/{folder_name}を作成しました。")親フォルダ/2023年10月を作成しました。
親フォルダ/2023年11月を作成しました。
親フォルダ/2023年12月を作成しました。この方法では、フォルダ名をリストで管理することで、柔軟にフォルダを作成できます。
フォルダ構造を再帰的に作成する方法
親フォルダの中にさらにサブフォルダを作成する場合、再帰的にフォルダ構造を作成することができます。
import os
# フォルダ構造の定義
folder_structure = {
"親フォルダ": {
"2023年10月": ["フォルダA", "フォルダB"],
"2023年11月": ["フォルダC"],
"2023年12月": []
}
}
# フォルダを再帰的に作成する関数
def create_folders(base_path, structure):
for folder_name, subfolders in structure.items():
# フォルダを作成
current_path = os.path.join(base_path, folder_name)
os.mkdir(current_path)
print(f"{current_path}を作成しました。")
# サブフォルダがあれば再帰的に作成
if subfolders:
create_folders(current_path, {subfolder: [] for subfolder in subfolders})
# 親フォルダを作成
base_folder = "親フォルダ"
os.mkdir(base_folder)
# フォルダ構造を作成
create_folders(base_folder, folder_structure)親フォルダ/2023年10月を作成しました。
親フォルダ/2023年10月/フォルダAを作成しました。
親フォルダ/2023年10月/フォルダBを作成しました。
親フォルダ/2023年11月を作成しました。
親フォルダ/2023年12月を作成しました。このように、再帰的にフォルダを作成することで、複雑なフォルダ構造を簡単に作成できます。
これらの方法を活用することで、効率的にフォルダを管理することが可能になります。
まとめ
この記事では、Pythonを使用してフォルダを作成する方法や、エラーハンドリング、さらには日付や時間を利用したフォルダ名の自動生成、複数のフォルダを一括で作成する方法について詳しく解説しました。
これらの知識を活用することで、効率的にファイル管理を行うことができるでしょう。
ぜひ、実際のプロジェクトや日常のタスクにこれらのテクニックを取り入れて、よりスムーズな作業を実現してください。