ExcelやCSVなどの表形式データに基づいてフォルダを一括作成する方法を解説する。手動でフォルダを作成する作業は時間がかかるが、Pythonを使えば自動化できる。
前提条件
以下のライブラリが必要となる:
- pandas - 表データの読み込みに使用
- openpyxl - Excelファイルを扱う場合に必要
インストールは以下のコマンドで実行する:
pip install pandas openpyxl
実装手順
1. データの準備
まず、フォルダ名を記載したExcelファイルを用意する。例えば「target_folders.xlsx」というファイルに「folder_name」という列を用意し、作成したいフォルダ名を記載する。
2. コードの実装
import os
import pandas as pd
def create_folders_from_excel(file_path, column_name):
"""
Excelファイルからフォルダ名を読み込み、一括でフォルダを作成する
Args:
file_path (str): Excelファイルのパス
column_name (str): フォルダ名が含まれる列名
"""
# Excelファイルを読み込む
data_frame = pd.read_excel(file_path)
# 指定した列のデータを取得してフォルダを作成
for folder_name in data_frame[column_name]:
# 文字列を整形(前後の空白を削除)
clean_name = str(folder_name).strip()
# フォルダが存在しない場合のみ作成
if not os.path.exists(clean_name):
os.makedirs(clean_name)
print(f"作成完了: {clean_name}")
else:
print(f"スキップ(既に存在): {clean_name}")
# 実行例
excel_file = "target_folders.xlsx"
target_column = "folder_name"
create_folders_from_excel(excel_file, target_column)
3. エラーハンドリングを追加した改良版
import os
import pandas as pd
from pathlib import Path
def batch_create_folders(file_path, column_name, base_dir="."):
"""
Excelデータからフォルダを一括作成する(エラーハンドリング付き)
Args:
file_path (str): Excelファイルのパス
column_name (str): フォルダ名の列名
base_dir (str): フォルダを作成するベースディレクトリ
"""
try:
# データを読み込み
df = pd.read_excel(file_path)
# 列が存在するか確認
if column_name not in df.columns:
raise ValueError(f"列 '{column_name}' が見つかりません")
success_count = 0
error_count = 0
for _, row in df.iterrows():
name = str(row[column_name]).strip()
# 無効な名前をスキップ
if not name or name == "nan":
continue
folder_path = Path(base_dir) / name
try:
folder_path.mkdir(parents=True, exist_ok=True)
success_count += 1
except OSError as e:
print(f"エラー: {name} - {e}")
error_count += 1
print(f"\n結果: 成功 {success_count}件, 失敗 {error_count}件")
except FileNotFoundError:
print(f"ファイルが見つかりません: {file_path}")
except Exception as e:
print(f"予期しないエラー: {e}")
# 使用例
batch_create_folders("target_folders.xlsx", "folder_name", base_dir="./output")
ポイント
os.makedirs()またはPath.mkdir(parents=True)を使うと、中間ディレクトリも含めて作成できるexist_ok=Trueを指定すると、フォルダが既に存在してもエラーにならない- フォルダ名に使用できない文字(/, :, *, ?, ", <, >, | など)が含まれていないか事前にチェックすることを推奨