Python读取CSV按ID提取行报KeyError: 'id'错误如何解决?
错误原因及解决方案
核心错误原因
- CSV表头隐藏字符/格式问题
最常见的是CSV文件使用UTF-8带BOM格式存储,导致第一列
id的键名前自动添加了零宽空格\ufeff,实际读取到的键为\ufeffid而非id,直接取line['id']就会触发KeyError。
其次是你提供的CSV样例表头逗号后带空格,如果id列前/后存在多余空格,读取到的键会变成' id '之类的带空格值,和传入的key_id="id"不匹配。
- 补充问题:你样例中的第二列表头拼写为
Numder,和你调用函数时传入的fieldnames=["Number", "Date"]拼写不一致,会导致后续写入文件时丢失该列数据,也建议修正。
- 补充问题:你样例中的第二列表头拼写为
修复方案
- 先确认实际读取到的表头,在
csv_reader = DictReader(in_file)后加一行代码打印表头:
print(csv_reader.fieldnames)
运行后就能看到实际的键名,如果确实有BOM头或者空格,对应修改key_id参数即可,比如BOM头的情况传key_id="\ufeffid"。
2. 统一处理表头空格,初始化DictReader时就去掉所有键名的前后空格,修改读取部分代码:
csv_reader = DictReader(in_file) # 统一去掉所有表头的前后空格 csv_reader.fieldnames = [field.strip() for field in csv_reader.fieldnames]
- 如果是BOM头导致的问题,打开文件时指定编码为
utf-8-sig自动剔除BOM头,修改open语句:
with open(file=master_csv, encoding='utf-8-sig') as in_file
- 修正表头拼写错误,把CSV里的
Numder改成Number,和你传入的fieldnames对应。
内容的提问来源于stack exchange,提问作者kansi
相关产品推荐
相关产品推荐

