Python | print出力+CSV/JSON保存 に加えて、日付ごとのフォルダに自動的に整理して保存する関数

Python
スポンサーリンク

ここでは、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呼び出し側でファイルパスを利用できる

💡 発展アイデア

  1. logging と連携 import logging logging.info(f"ファイル保存: {csv_path}")
  2. pandas.DataFrame 対応版
    • データ集計や可視化と連携しやすくなります。
  3. 出力形式の切り替え(YAML, Excelなど)
    • openpyxlpyyaml を組み合わせればさらに拡張可能。

まとめ

機能実装方法メリット
表の整形出力tabulate見やすい
CSV保存csv.writerExcel対応
JSON保存json.dumpデータ交換に便利
自動フォルダ作成Path.mkdir()日ごとに整理できる
Python
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました