BlackyDoe

スプレッドシートをエクスポートしたのに、パイプラインの次のツールがJSONを求めていることがある。pandasを読み込むのは大げさ——Pythonの標準ライブラリだけで十分だ。サードパーティパッケージ不要で、わずかな行数で実現する小さなコンバーターを紹介する。

1. CSVの読み込み

csv.DictReaderはヘッダ行をキーとする辞書に各行を自動変換する。手動でのヘッダ解析は不要。

import csv

def read_csv(csv_path):
    with open(csv_path, newline="", encoding="utf-8") as f:
        reader = csv.DictReader(f)return list(reader)

Enter fullscreen mode Exit fullscreen mode

結果をlist()でラップすることでリーダーを前もってすべて消費する。小〜中規模ファイルなら問題なく、後で遅延反復するより遥かに理解しやすい。

2. JSONの書き込み

import json

def write_json(rows, json_path):
    with open(json_path, "w", encoding="utf-8") as f:
        json.dump(rows, f, indent=2)

Enter fullscreen mode Exit fullscreen mode

indent=2は出力を人間が読みやすく保つ。誰かがファイルを開いて内容を確認する場合に役立つ。

3. まとめる

def csv_to_json(csv_path, json_path):
    rows = read_csv(csv_path)
    write_json(rows, json_path)
    return len(rows)

Enter fullscreen mode Exit fullscreen mode

行数を返すことで簡単な健全性チェックになる。500件の連絡先を想定していたのに3件しか返ってこなければ、ファイルを開く前に上流で問題が発生したことがわかる。

4. スクリプト全体

import csv
import json

def read_csv(csv_path):
    with open(csv_path, newline="", encoding="utf-8") as f:
        reader = csv.DictReader(f)
        return list(reader)

def write_json(rows, json_path):
    with open(json_path, "w", encoding="utf-8") as f:
        json.dump(rows, f, indent=2)

def csv_to_json(csv_path, json_path):
    rows = read_csv(csv_path)
    write_json(rows, json_path)
    return len(rows)

if __name__ == "__main__":
    count = csv_to_json("contacts.csv", "contacts.json")
    print(f"Converted {count} rows -> contacts.json")

Enter fullscreen mode Exit fullscreen mode

5. 試してみる

次のようなcontacts.csvがあるとする。

name,email,city
Alice,alice@example.com,Austin
Bob,bob@example.com,Denver

Enter fullscreen mode Exit fullscreen mode

スクリプトを実行すると次のJSONが出力される。

[
  {
    "name": "Alice",
    "email": "[email protected]",
    "city": "Austin"
  },
  {
    "name": "Bob",
    "email": "[email protected]",
    "city": "Denver"
  }
]

Enter fullscreen mode Exit fullscreen mode

まとめ

これは一般的なケースをカバーする:ヘッダ行が1行のクリーンで整ったCSV。エンコーディングの不整合、埋め込まれたカンマ、複数行フィールドなど、より複雑な実世界のファイルについては、Pythonのcsvモジュールが適切なクォート処理で大部分を正しく扱う。ただし非常に不規則なエクスポートには変換前に追加のクリーンアップが必要になる場合もある。それでも、スプレッドシートからAPIへの素早いパイプラインにはこれだけで十分なことが多い。