You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 19:12:36