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
相关产品推荐
相关产品推荐

