# ===== CodeLab: Python JSON 与 CSV 数据处理 =====
# 来源: https://aoerliang.dpdns.org/articles/python-json-csv
# 以下代码片段按文章出现顺序拼接, 共 5 段

# ----- 片段 1 (python) -----
import json

data = {"name": "Ada", "skills": ["Python", "SQL"], "active": True}

with open("user.json", "w", encoding="utf-8") as f:
    json.dump(data, f, ensure_ascii=False, indent=2)

with open("user.json", encoding="utf-8") as f:
    loaded = json.load(f)
print(loaded["name"])  # Ada

# ----- 片段 2 (python) -----
import csv

with open("scores.csv", "w", newline="", encoding="utf-8") as f:
    writer = csv.writer(f)
    writer.writerow(["name", "score"])
    writer.writerow(["Ada", 92])
    writer.writerow(["Bob", 88])

# ----- 片段 3 (python) -----
import csv

with open("scores.csv", encoding="utf-8") as f:
    reader = csv.DictReader(f)
    for row in reader:
        print(row["name"], row["score"])
# 注意:此时 score 是字符串 "92",需要数值时自行转 int

# ----- 片段 4 (python) -----
import json, csv

rows = []
with open("scores.csv", encoding="utf-8") as f:
    for row in csv.DictReader(f):
        row["score"] = int(row["score"])
        rows.append(row)

with open("scores.json", "w", encoding="utf-8") as f:
    json.dump(rows, f, ensure_ascii=False, indent=2)

# ----- 片段 5 (python) -----
import csv

result = []
with open("raw.csv", encoding="utf-8") as f:
    for row in csv.DictReader(f):
        score = row["score"].strip()
        if not score:                # 空值直接跳过
            continue
        s = int(score)
        row["passed"] = s >= 60
        result.append(row)

with open("clean.csv", "w", newline="", encoding="utf-8") as f:
    writer = csv.DictWriter(f, fieldnames=result[0].keys())
    writer.writeheader()
    writer.writerows(result)
