Notes & software courses · Free to learn
Aph's Blog
On this page

CSV & JSON

👋 อ่านฟรีทั้งหมดบน Aph's Blog — เนื้อหาภาษาไทย ทำตามทีละหน้าใน sidebar ได้เลย หากมีข้อเสนอแนะหรืออยากให้เพิ่มหัวข้อไหน บอกได้เสมอ

อ่าน/เขียนสองรูปแบบข้อมูลที่เจอบ่อยที่สุด — CSV (ตาราง) และ JSON (ภาษากลางของ API)

ข้อมูลในโลกจริงมักอยู่ในรูปแบบมาตรฐาน CSV (ไฟล์ตารางจาก Excel) และ JSON (ข้อมูลที่ API ส่งมา) Python มีโมดูลสำเร็จสำหรับทั้งคู่ ไม่ต้อง parse เอง

JSON — ภาษากลางของ API

JSON หน้าตาเหมือน dict/list ของ Python มาก โมดูล json แปลงไปมาได้ง่าย: loads/dumps ทำกับ string, load/dump ทำกับไฟล์

python
import json

# Python object -> JSON string
data = {"name": "Aph", "age": 25, "skills": ["python", "sql"]}
text = json.dumps(data, ensure_ascii=False, indent=2)
print(text)

# JSON string -> Python object
obj = json.loads(text)
print(obj["name"])     # Aph

# อ่าน/เขียนไฟล์ JSON
with open("data.json", "w", encoding="utf-8") as f:
    json.dump(data, f, ensure_ascii=False, indent=2)

with open("data.json", encoding="utf-8") as f:
    loaded = json.load(f)
ensure_ascii=False สำหรับภาษาไทย

โดยปกติ json.dumps จะแปลงตัวอักษรไทยเป็น \uXXXX ใส่ ensure_ascii=False เพื่อให้เก็บภาษาไทยเป็นตัวอ่านออกได้ และ indent=2 ทำให้จัดรูปสวยอ่านง่าย

CSV — ข้อมูลตาราง

CSV คือไฟล์ตารางคั่นด้วยจุลภาค โมดูล csv อ่านเป็นแถวได้ และ DictReader อ่านแต่ละแถวเป็น dict (ใช้ header เป็น key)

python
import csv

# อ่านเป็น dict ต่อแถว (header เป็น key)
with open("users.csv", encoding="utf-8") as f:
    reader = csv.DictReader(f)
    for row in reader:
        print(row["name"], row["age"])

# เขียน CSV
rows = [{"name": "Aph", "age": 25}, {"name": "Bee", "age": 30}]
with open("out.csv", "w", newline="", encoding="utf-8") as f:
    writer = csv.DictWriter(f, fieldnames=["name", "age"])
    writer.writeheader()
    writer.writerows(rows)

เลือกใช้อันไหน

รูปแบบเหมาะกับเจอที่ไหน
JSONข้อมูลซ้อนชั้น (object/list)API, config
CSVข้อมูลตารางแบน ๆExcel, export ข้อมูล

สรุปหัวข้อนี้

  • json: loads/dumps (string), load/dump (ไฟล์) — JSON ≈ dict/list
  • ใช้ ensure_ascii=False กับภาษาไทย, indent=2 จัดรูป
  • csv.DictReader อ่านแต่ละแถวเป็น dict; DictWriter เขียน
  • JSON = ข้อมูลซ้อนชั้น/API; CSV = ตารางแบน/Excel
แบบฝึกหัด

1) แปลง dict เป็น JSON string แล้ว parse กลับ 2) เขียน list of dict ลงไฟล์ JSON พร้อม indent 3) อ่าน CSV ด้วย DictReader แล้วกรองแถวตามเงื่อนไข 4) อ่าน CSV → กรอง → เขียนผลออกเป็น JSON