Python导入CSV至SQLite时出现KeyError: 'identifier'错误求助
解决CSV导入SQLite时的KeyError: 'identifier'问题
嘿,咱们来搞定你把CSV导入SQLite时碰到的这个键错误!这个问题基本都是代码里引用的字段名和CSV实际的列名不匹配导致的,我给你梳理几个排查方向:
1. 先确认CSV的表头字段
首先打开你的CSV文件,看看第一行(表头)里是不是真的有identifier这个列名。常见的坑包括:
- 拼写错误:比如写成了
Identifer、id或者别的名字 - 大小写不一致:CSV里是
Identifier但代码里用的是小写的identifier - 表头带空格:比如
identifier(前后有空格),这种情况下字典键也会带空格,直接用identifier访问就会报错
嫌手动看麻烦的话,也可以用一段小代码打印出CSV的所有表头:
import csv with open('你的文件名.csv', 'r', encoding='utf-8') as f: reader = csv.DictReader(f) print("CSV里的表头字段:", reader.fieldnames)
运行这段代码,看看输出里有没有identifier,就能快速确认问题。
2. 检查代码里的字段引用
你报错的行是在列表推导里用i['col1']这类方式取字段,其中肯定有一处用到了i['identifier'],但CSV里根本没有这个字段。仔细核对代码里所有用字典键的地方,确保每个键都和CSV表头完全一致(包括大小写、空格)。
比如如果CSV里的列名是id,那你就得把代码里的i['identifier']改成i['id']。
3. 处理可能缺失字段的情况
如果有些行确实没有identifier这个字段(比如部分数据为空),可以用字典的get方法来避免报错,给它设置一个默认值:
# 不存在的话就返回None,或者你指定的默认值比如'无' i.get('identifier', None)
这样即使某行缺少这个字段,代码也不会抛出KeyError,而是用默认值填充。
4. 确认CSV的读取方式是否正确
如果你用的是csv.reader(返回的是列表,不是字典),那用i['identifier']这种键访问的方式肯定会报错。要确保你用的是csv.DictReader,它会把表头作为字典的键,每行数据以字典形式返回。
最后给你一个完整的示例参考(假设你的表结构和CSV列匹配):
import csv import sqlite3 # 连接SQLite数据库 conn = sqlite3.connect('你的数据库名.db') cursor = conn.cursor() # 先创建表(确保字段和CSV对应) cursor.execute('''CREATE TABLE IF NOT EXISTS 你的表名 (col1 TEXT, col2 TEXT, identifier TEXT)''') # 读取CSV并准备数据 with open('你的文件名.csv', 'r', encoding='utf-8') as f: reader = csv.DictReader(f) # 用get方法处理可能缺失的identifier字段 data_list = [(i['col1'], i['col2'], i.get('identifier', '无')) for i in reader] # 批量插入数据 cursor.executemany('INSERT INTO 你的表名 VALUES (?, ?, ?)', data_list) # 提交并关闭连接 conn.commit() conn.close()
先从检查CSV表头开始,这是最常见的原因,应该能很快定位问题!
内容的提问来源于stack exchange,提问作者Niknak
相关产品推荐
相关产品推荐

