有時候你匯出試算表,下一個流程工具卻需要 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 流程而言,這通常就足夠了。
0 Comments
Log in to join the conversation.No comments yet. Be the first to share your thoughts.