Python读取CSV时触发ValueError: not enough values to unpack的原因咨询
问题排查与修复:CSV读取时的ValueError
核心错误原因
你的代码存在两个关键问题,共同导致了这个报错:
1. CSV写入时的数据格式错误
定义rows列表时,除第一行外,其余行的最后两个元素都缺失逗号分隔,例如:
['1234', 'Sanchit', 'COE', '2', '9.1''.20']
这里9.1和.20之间没有逗号,Python会自动将其拼接成单个字符串'9.1.20',导致该行实际只有5个元素。写入CSV后,这类行缺少一列,读取时自然拆不出预期的6个值。
2. CSV读取方式错误
你已初始化csv_reader = csv.reader(csv_file),但未使用它处理行数据,反而直接遍历原始文件行并手动用split(", ")分割。这种方式存在两个问题:
csv.reader会自动处理CSV标准分隔规则(如逗号前后空格、引号包裹内容等),手动分割极易出错- 未跳过表头行,表头内容为字符串,后续转
float也会引发异常
修复后的完整代码
import queue import csv # 假设你已定义Employee类 class Employee: def __init__(self, emp_id, first_name, job_title, hours_worked, hourly_wage, federal_tax_rate): self.emp_id = emp_id self.first_name = first_name self.job_title = job_title self.hours_worked = hours_worked self.hourly_wage = hourly_wage self.federal_tax_rate = federal_tax_rate input_queue = queue.Queue() payStubs_queue = queue.Queue() '''Writing to CSV file''' fields = ['ID', 'Name', 'Title', 'Hours Worked', 'Hourly Wage', 'Federal Tax Rate'] # 修复rows中缺失的逗号,确保每行有6个元素 rows = [ ['1234', 'Nikhil', 'COE', '2', '9.0', '.20'], ['1234', 'Sanchit', 'COE', '2', '9.1', '.20'], ['1234', 'Aditya', 'IT', '2', '9.3', '.20'], ['1234', 'Sagar', 'SE', '1', '9.5', '.20'], ['1234', 'Prateek', 'MCE', '3', '7.8', '.20'], ['1234', 'Sahil', 'EP', '2', '9.1', '.20']] filename = "university_records.csv" with open(filename, 'w', newline='') as csvfile: csvwriter = csv.writer(csvfile) csvwriter.writerow(fields) csvwriter.writerows(rows) '''Reading File''' with open(filename, newline='') as csv_file: csv_reader = csv.reader(csv_file) # 跳过表头行 next(csv_reader) # 使用csv_reader遍历处理后的行数据 for row in csv_reader: # 提前校验行元素数量,避免异常 if len(row) == 6: emp_id, first_name, job_title, hours_worked, hourly_wage, federal_tax_rate = row employee = Employee(emp_id, first_name, job_title, float(hours_worked), float(hourly_wage), float(federal_tax_rate)) input_queue.put(employee)
关键修复点说明
- 补全
rows中所有缺失的逗号,保证每行都包含6个数据元素 - 使用
csv_reader遍历行数据,替代手动读取原始行并分割的方式 - 用
next(csv_reader)跳过表头行,避免处理字段名数据 - 增加
len(row) == 6的判断,提前过滤异常行,防止报错
内容的提问来源于stack exchange,提问作者fskiddles
相关产品推荐
相关产品推荐

