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

Python读取CSV触发KeyError: 'primaryName'问题求助

解决非标准CSV读取的KeyError问题

方案1:直接适配现有代码,指定正确分隔符

先打开你的CSV文件,确认前面列的实际分隔符(比如制表符\t、分号;或竖线|),然后在csv.DictReader中指定delimiter参数,让它按正确规则分割列:

import csv

# 替换成你的CSV路径和实际分隔符
with open('target.csv', 'r', encoding='utf-8') as f:
    reader = csv.DictReader(f, delimiter='\t')  # 示例用制表符,根据实际情况替换
    for row in reader:
        print(row['primaryName'])  # 可正常读取目标字段

如果最后一列本身包含逗号但未加引号,只要前面列的分隔符不是逗号,指定正确delimiter后,csv模块会自动把最后一列作为完整字段处理,不会拆分。

方案2:预处理为标准CSV

如果不想修改读取代码,也可以先把非标准CSV转换成规范格式,确保每个字段被正确识别:

import csv

input_path = 'non_standard.csv'
output_path = 'standardized.csv'

with open(input_path, 'r', encoding='utf-8') as infile, open(output_path, 'w', encoding='utf-8', newline='') as outfile:
    # 读取表头,确定字段总数(表头分隔符按实际情况调整)
    header_line = next(infile).strip()
    header = header_line.split(',')
    num_fields = len(header)
    
    # 初始化标准CSV写入器,自动处理字段引号
    writer = csv.writer(outfile, quoting=csv.QUOTE_MINIMAL)
    writer.writerow(header)
    
    # 处理每一行:只分割前num_fields-1个分隔符,剩余部分合并为最后一个字段
    for line in infile:
        line = line.strip()
        row_parts = line.split(',', num_fields - 1)
        writer.writerow(row_parts)

处理完成后,用原有代码读取standardized.csv即可正常使用csv.DictReader。

关键提示

  • 必须先手动打开CSV文件确认结构:明确表头和数据行的列分隔符,判断最后一列的逗号是字段内内容还是错误的分隔符。
  • 如果前面列的分隔符是特殊符号,可以自定义csv.Dialect来适配。

内容的提问来源于stack exchange,提问作者Ctrl-Alt-Rage

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 06:40:29