Python CSV读取器没有足够的值来解包(预期为11,得到1)

Python CSV读取器没有足够的值来解包(预期为11,得到1),python,csv,Python,Csv,我在使用csv阅读器时遇到问题。 我想逐行读取csv文件,并打印出每行的第二个条目。 一行的所有入口都写在一个单元端,以“,”分隔 看起来是这样的: 0.00457.00,0.00862.001289232575,“LAX”,1129230325,“DEN”,11 我尝试了以下代码: with open(file_path, 'r', newline='') as file: reader = csv.reader(file, delimiter=',')

我在使用csv阅读器时遇到问题。 我想逐行读取csv文件,并打印出每行的第二个条目。 一行的所有入口都写在一个单元端,以“,”分隔

看起来是这样的: 0.00457.00,0.00862.001289232575,“LAX”,1129230325,“DEN”,11

我尝试了以下代码:

    with open(file_path, 'r', newline='') as file:
        reader = csv.reader(file, delimiter=',')
        for line in reader:
            passangers, freight, mail, distance, origin_airport_id, origin_city_marked_id, origin, dest_airport_id, dest_city_marked_id, dest, month = line
            print(freight)
但是我得到:ValueError:没有足够的值来解包(预期为11,得到1)


这段代码不久前在另一个项目中为我工作,所以我真的不知道为什么它现在不工作。我尝试了不同的分隔符(“;”、空格等),但这基本上是一个猜测,因为我不知道还能做什么

问题是因为您试图将包含12个元素的列表压缩为11个元素

尝试:

原始问题的简化示例:

$ cat list.py 
line = ['a','b','c']
a,b = line

$ python list.py 
Traceback (most recent call last):
  File "list.py", line 2, in <module>
    a,b = line
ValueError: too many values to unpack (expected 2)
$cat list.py
行=['a','b','c']
a、 b=直线
$python list.py
回溯(最近一次呼叫最后一次):
文件“list.py”,第2行,在
a、 b=直线
ValueError:要解压缩的值太多(应为2个)

我强烈建议您使用
csv.DictReader
来构建逻辑结构。命名如此大量的变量很可能会导致混淆

下面是一个示例,其中我们为
fieldnames
参数提供了一个列表。请注意,共有12个字段,因为行以逗号结尾。由于
field\u list
只有11个元素,因此最后一列被分配了键
None
。当你打印字典时,这是显而易见的

from io import StringIO
import csv

mystr = StringIO('0.00,457.00,0.00,862.00,12892,32575,"LAX",11292,30325,"DEN",11,')

field_list = ['passengers', 'freight', 'mail', 'distance', 'origin_airport_id',
              'origin_city_marked_id', 'origin', 'dest_airport_id',
              'dest_city_marked_id', 'dest', 'month']

# replace mystr with open(file_path, 'r', newline='')
with mystr as file:
    reader = csv.DictReader(file, delimiter=',', fieldnames=field_list)
    for line in reader:
        print(line)

OrderedDict([('passengers', '0.00'),
             ('freight', '457.00'),
             ('mail', '0.00'),
             ('distance', '862.00'),
             ('origin_airport_id', '12892'),
             ('origin_city_marked_id', '32575'),
             ('origin', 'LAX'),
             ('dest_airport_id', '11292'),
             ('dest_city_marked_id', '30325'),
             ('dest', 'DEN'),
             ('month', '11'),
             (None, [''])])

如果您
打印(行)
返回什么?为什么不试试<代码>将熊猫作为pd导入,df=pd.read\u csv(文件路径),df['freight']。最后一行假设您的csv有标题行,如果我在乘客之前打印(行),。。。我得到的行:[0.00457.00,0.00862.001289232575,“LAX”,1129230325,“DEN”,11,]
from io import StringIO
import csv

mystr = StringIO('0.00,457.00,0.00,862.00,12892,32575,"LAX",11292,30325,"DEN",11,')

field_list = ['passengers', 'freight', 'mail', 'distance', 'origin_airport_id',
              'origin_city_marked_id', 'origin', 'dest_airport_id',
              'dest_city_marked_id', 'dest', 'month']

# replace mystr with open(file_path, 'r', newline='')
with mystr as file:
    reader = csv.DictReader(file, delimiter=',', fieldnames=field_list)
    for line in reader:
        print(line)

OrderedDict([('passengers', '0.00'),
             ('freight', '457.00'),
             ('mail', '0.00'),
             ('distance', '862.00'),
             ('origin_airport_id', '12892'),
             ('origin_city_marked_id', '32575'),
             ('origin', 'LAX'),
             ('dest_airport_id', '11292'),
             ('dest_city_marked_id', '30325'),
             ('dest', 'DEN'),
             ('month', '11'),
             (None, [''])])