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 流水线,这通常就是你所需要的全部。