ここでは、print出力+CSV/JSON保存 に加えて、
日付ごとのフォルダに自動的に整理して保存する関数を作ります。
目標
表データを
- コンソール表示(整形済)
- CSV / JSON ファイル出力
- 自動で
output/YYYY-MM-DD/フォルダを作成
完成コード例:日付フォルダ自動生成つき
import csv
import json
from tabulate import tabulate
from pathlib import Path
from datetime import datetime
def export_table_auto_dir(data, headers, prefix="report"):
"""
表データを整形表示しつつ、日付フォルダに CSV / JSON を保存する関数。
フォルダ構成例:
output/2025-11-05/report_20251105_180000.csv
output/2025-11-05/report_20251105_180000.json
"""
# === 1. 日付フォルダを自動生成 ===
today = datetime.now().strftime("%Y-%m-%d")
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
out_dir = Path("output") / today
out_dir.mkdir(parents=True, exist_ok=True)
# === 2. 出力ファイル名を生成 ===
basename = f"{prefix}_{timestamp}"
csv_path = out_dir / f"{basename}.csv"
json_path = out_dir / f"{basename}.json"
# === 3. 表を整形して出力 ===
print(tabulate(data, headers=headers, tablefmt="grid"))
# === 4. CSV 出力 ===
with csv_path.open("w", newline="", encoding="utf-8") as f:
writer = csv.writer(f)
writer.writerow(headers)
writer.writerows(data)
print(f"[CSV 出力] {csv_path.resolve()}")
# === 5. JSON 出力 ===
json_data = [dict(zip(headers, row)) for row in data]
with json_path.open("w", encoding="utf-8") as f:
json.dump(json_data, f, ensure_ascii=False, indent=2)
print(f"[JSON 出力] {json_path.resolve()}")
return csv_path, json_path
Python使用例
data = [
["Alice", 25, "Tokyo"],
["Bob", 31, "Osaka"],
["Charlie", 29, "Nagoya"]
]
headers = ["名前", "年齢", "出身地"]
export_table_auto_dir(data, headers, prefix="people")
Python💻 コンソール出力
+----------+------+----------+
| 名前 | 年齢 | 出身地 |
+----------+------+----------+
| Alice | 25 | Tokyo |
| Bob | 31 | Osaka |
| Charlie | 29 | Nagoya |
+----------+------+----------+
[CSV 出力] /your/path/output/2025-11-05/people_20251105_180000.csv
[JSON 出力] /your/path/output/2025-11-05/people_20251105_180000.json
📂 出力フォルダ構成例
output/
└── 2025-11-05/
├── people_20251105_180000.csv
└── people_20251105_180000.json
仕組みのポイント
| 処理 | 説明 |
|---|---|
Path("output") / today | 日付別フォルダを生成 (output/2025-11-05/) |
mkdir(parents=True, exist_ok=True) | 存在しなければ自動作成 |
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") | 重複防止用の時刻つきファイル名 |
return csv_path, json_path | 呼び出し側でファイルパスを利用できる |
💡 発展アイデア
- logging と連携
import logging logging.info(f"ファイル保存: {csv_path}") - pandas.DataFrame 対応版
- データ集計や可視化と連携しやすくなります。
- 出力形式の切り替え(YAML, Excelなど)
openpyxlやpyyamlを組み合わせればさらに拡張可能。
まとめ
| 機能 | 実装方法 | メリット |
|---|---|---|
| 表の整形出力 | tabulate | 見やすい |
| CSV保存 | csv.writer | Excel対応 |
| JSON保存 | json.dump | データ交換に便利 |
| 自動フォルダ作成 | Path.mkdir() | 日ごとに整理できる |

