有时你导出一个电子表格,但流水线中的下一个工具需要 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.