Python | 表データを CSV / JSON にも同時出力する関数

Python
スポンサーリンク

ここでは「print で表を表示しながら、同じデータを CSV と JSON に保存する」実用的な関数を作ります。


目標

  • 表形式データ(リストのリスト)をきれいに print 表示
  • 同時に CSV ファイルJSON ファイル に保存
  • すぐ実務や学習メモに使える形

サンプル完成コード

import csv
import json
from tabulate import tabulate
from pathlib import Path


def export_table(data, headers, basename="output"):
    """
    表データを整形表示しつつ、CSV・JSONにも出力する関数。
    
    Parameters
    ----------
    data : list[list]
        表データ(各行をリストとして渡す)
    headers : list[str]
        列名
    basename : str
        出力ファイル名のベース(例: 'result' → result.csv / result.json)
    """

    # === 1. 表をコンソールに整形表示 ===
    print(tabulate(data, headers=headers, tablefmt="grid"))

    # === 2. CSVファイル出力 ===
    csv_path = Path(f"{basename}.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()}")

    # === 3. JSONファイル出力 ===
    json_path = Path(f"{basename}.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()}")
Python

使用例

data = [
    ["Alice", 25, "Tokyo"],
    ["Bob", 31, "Osaka"],
    ["Charlie", 29, "Nagoya"]
]
headers = ["名前", "年齢", "出身地"]

export_table(data, headers, basename="people")
Python

💻 コンソール出力

+----------+------+----------+
| 名前     | 年齢  | 出身地    |
+----------+------+----------+
| Alice    |   25 | Tokyo    |
| Bob      |   31 | Osaka    |
| Charlie  |   29 | Nagoya   |
+----------+------+----------+
[CSV 出力] /your/path/people.csv
[JSON 出力] /your/path/people.json

📁 出力ファイル内容

people.csv

名前,年齢,出身地
Alice,25,Tokyo
Bob,31,Osaka
Charlie,29,Nagoya

people.json

[
  {
    "名前": "Alice",
    "年齢": 25,
    "出身地": "Tokyo"
  },
  {
    "名前": "Bob",
    "年齢": 31,
    "出身地": "Osaka"
  },
  {
    "名前": "Charlie",
    "年齢": 29,
    "出身地": "Nagoya"
  }
]

補足解説

処理技術ポイント
表の整形tabulatetablefmt="grid" で見やすく
CSV書き出しcsv.writer を使うと自動でカンマ区切り&改行処理
JSON書き出しdict(zip(headers, row)) で列名と値を対応付け
ファイル名pathlib.Path で OS に依存しない安全な書き方

💡 発展例(オプション)

  1. basename にタイムスタンプを自動追加
  2. 出力フォルダ(例:output/)を自動作成
  3. pandas.DataFrame を使って一括管理

例:タイムスタンプ付き拡張版

from datetime import datetime

def export_table_auto(data, headers, prefix="report"):
    timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
    basename = f"{prefix}_{timestamp}"
    export_table(data, headers, basename)
Python

まとめ

出力対象方法備考
画面表示tabulate見やすい整形出力
CSVcsv.writerExcelでも開ける
JSONjson.dumpAPIやデータ交換向け

Python
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました