如何解决Python读取CSV时报ValueError: too many values to unpack (expected 2)错误
错误原因分析
csv.reader迭代每一行时会返回当前行所有字段组成的列表,你写的for header[2],row in csvreader要求每一行只有2个字段才能正常解包赋值,而你的Data.csv实际每行字段数大于2,因此触发值解包失败报错- 额外逻辑问题:你将循环的第一个解包值赋值给
header[2],会直接覆盖已读取的表头第三列的值,属于完全不必要的错误写法 - 你提供的代码未导入csv模块,即使解包问题修复,运行时还会触发
NameError报错
修复后的正确代码
假设你要提取的用户名存放在CSV的第三列(索引为2,索引从0开始计数),修复后代码如下:
import csv # 使用with上下文管理器自动管理文件资源,无需手动调用close() with open("Data.csv", encoding="utf-8") as file: csvreader = csv.reader(file) header = next(csvreader) usernames = [] for row in csvreader: # 直接提取当前行第三列的用户名存入列表 usernames.append(row[2]) print(usernames)
补充说明
- 如果用户名不在第三列,修改
row[2]中的索引即可,第一列对应索引0、第二列对应索引1,以此类推 - 如果你的CSV使用非逗号的特殊分隔符(比如分号、制表符),可以在
csv.reader(file)中添加delimiter参数指定分隔符,例如csv.reader(file, delimiter=';') - 如果读取文件出现编码错误,可以尝试将
encoding="utf-8"修改为encoding="gbk"适配Windows系统下的中文编码文件
内容的提问来源于stack exchange,提问作者PONIO
相关产品推荐
相关产品推荐

