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

2024-09-27 17:44:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我在使用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)

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


Tags: 文件csv代码idcityline条目origin
2条回答

我强烈建议您使用csv.DictReader来构造逻辑。像这里一样,命名这么多变量很可能会导致混淆。在

下面是一个示例,其中我们为fieldnames参数提供一个列表。注意,有12个字段,因为您的行以逗号结尾。由于field_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, [''])])

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

尝试:

    passangers, freight, mail, distance, origin_airport_id, origin_city_marked_id, origin, dest_airport_id, dest_city_marked_id, dest, month, element = line

原始问题的简化示例:

^{pr2}$

相关问题 更多 >

    热门问题