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() 包裝結果會立即讀取整個 reader;對中小型檔案而言,這既簡單又容易理解,不必稍後再進行惰性迭代。

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

執行腳本後會產生:

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

Enter fullscreen mode Exit fullscreen mode

結語

本範例涵蓋一般情境:單一標題列、格式良好的 CSV。對於較複雜的實務檔案——編碼不一致、內嵌逗號、多行欄位等——Python 的 csv 模組已透過正確的引號處理大多數情況,但非常不規則的匯出檔可能仍需先清理。無論如何,對快速的試算表轉 API 流程而言,這通常就足夠了。