You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将4列CSV转换为指定结构JSON并解决KeyError: 'C'报错

问题修复方案

错误原因

KeyError: 'C'是因为csv.DictReader读取到的CSV表头字段中不存在名为C的键,常见触发场景有两个:

  • CSV表头的C列名前后带有多余的空格,实际读取到的键名是带空格的' C '而非'C'
  • 你样例中标记的A、B、C、D是自己标注的列序号,实际CSV文件没有这行表头,第一行直接就是数据内容,csv.DictReader默认把第一行数据当成了表头,自然找不到C这个键

同时你原代码还有一个逻辑错误:你把整行数据赋值给了字典值,不符合你需要的C列内容为键、B列翻译文本为值的要求。

修复代码

场景1:CSV第一行确实是A、B、C、D作为表头

先对读取到的字段名做空格清洗,同时修正取值逻辑:

import csv
import json

def make_json(csvFilePath, jsonFilePath):
    data = {}
    with open(csvFilePath, encoding='utf-8') as csvf:
        csvReader = csv.DictReader(csvf)
        # 清洗所有表头字段的前后空格,避免隐形空格导致取值失败
        csvReader.fieldnames = [field.strip() for field in csvReader.fieldnames]
        for row in csvReader:
            key = row["C"].strip()
            # 仅取B列的翻译文本作为值
            data[key] = row["B"].strip()
    with open(jsonFilePath, 'w', encoding='utf-8') as jsonf:
        # 加ensure_ascii=False避免中文被转义为Unicode编码
        json.dump(data, jsonf, indent=4, ensure_ascii=False)

csvFilePath = "main.csv"
jsonFilePath = "test.json"
make_json(csvFilePath, jsonFilePath)

场景2:CSV没有A、B、C、D的表头,第一行就是数据

手动指定字段名即可:

import csv
import json

def make_json(csvFilePath, jsonFilePath):
    data = {}
    # 手动指定四列对应的字段名
    field_names = ["A", "B", "C", "D"]
    with open(csvFilePath, encoding='utf-8') as csvf:
        # 传入自定义字段名,DictReader会把所有行都当成数据处理
        csvReader = csv.DictReader(csvf, fieldnames=field_names)
        for row in csvReader:
            key = row["C"].strip()
            data[key] = row["B"].strip()
    with open(jsonFilePath, 'w', encoding='utf-8') as jsonf:
        json.dump(data, jsonf, indent=4, ensure_ascii=False)

csvFilePath = "main.csv"
jsonFilePath = "test.json"
make_json(csvFilePath, jsonFilePath)

验证方法

如果不确定自己的CSV表头内容,可以在创建csvReader后加一行print(csvReader.fieldnames)运行,就能看到实际读取到的所有表头字段,匹配键名即可。

内容的提问来源于stack exchange,提问作者PstasDev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 11:57:03