ここでは「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"
}
]
補足解説
| 処理 | 技術ポイント |
|---|
| 表の整形 | tabulate の tablefmt="grid" で見やすく |
| CSV書き出し | csv.writer を使うと自動でカンマ区切り&改行処理 |
| JSON書き出し | dict(zip(headers, row)) で列名と値を対応付け |
| ファイル名 | pathlib.Path で OS に依存しない安全な書き方 |
💡 発展例(オプション)
basename にタイムスタンプを自動追加
- 出力フォルダ(例:
output/)を自動作成
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 | 見やすい整形出力 |
| CSV | csv.writer | Excelでも開ける |
| JSON | json.dump | APIやデータ交換向け |