JSON 和 CSV 是日常工作中最常见的两种数据格式:API 接口返回 JSON,表格数据导出 CSV。Python 标准库自带 json 与 csv 模块,学会它们,你就能轻松完成数据读写、清洗与格式转换。

1. JSON 的读写

json 模块的核心是四个函数:dumps/loads 处理字符串,dump/load 处理文件。写入时记得加 ensure_ascii=False 保留中文:

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. CSV 的读写

写 CSV 时务必传 newline="",否则 Windows 上会出现空行:

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. DictReader:按表头读数据

表头是"列名"的 CSV,用 csv.DictReader 读起来最直观,每一行是一个字典:

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. JSON 与 CSV 互转

转换的核心是"统一中间格式":先把 CSV 读成字典列表,再一次性写入 JSON;反向操作同理:

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. 实战:清洗一份成绩单

假设原始数据里有空值和"是否及格"需要标记,一步到位:

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)

6. 常见坑与建议

💡 学习建议:找一份真实数据(本机日志、公开数据集都行),练习"读 CSV → 清洗 → 写 JSON"的完整流程,数据处理的套路就掌握了。