Python CSV读取器没有足够的值来解包(预期为11,得到1)
我在使用csv阅读器时遇到问题。 我想逐行读取csv文件,并打印出每行的第二个条目。 一行的所有入口都写在一个单元端,以“,”分隔 看起来是这样的: 0.00457.00,0.00862.001289232575,“LAX”,1129230325,“DEN”,11 我尝试了以下代码: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=',')
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, [''])])