所以我写了这段代码,它是为了读取一个csv文件,并将数据写入一个字典,其中的键是“key1”“key2”“key3”“key4”,值是一个列表,由csv文件的列中的数据组成,但做了一些修改:
import numpy as np
import csv
#code
...
#code
with open(file,'r') as fl:
csv_file=csv.DictReader(fl)
fdata={
'key1':[data['THING'] for data in csv_file],
'key2':[f"{data['STR1']}, {data['STR2']}, {data['STR3']}" for data in csv_file],
'key3':[np.array([data['FL1'],data['FL2']],dtype=float) for data in csv_file],
'key4':[int(data['POPULATION']) for data in csv_file]
}
问题是,所有的列表都是空的,除了第一个,键值为“key1”的列表,甚至当取出“key4”中的类型转换时,它也不起作用,最初我以为它与numpy,类型转换或字符串格式有关,但我不知道错在哪里,网上有很多这样的例子,使用print()调试显示数据正在读取。我不知道该怎么办
另外,我确定CSV文件“THING”,“STR1”,“STR2”,“STR3”,“FL1”,“FL2”的键是正确的。另一件事是,csv文件很大,但不是数百万行长,
1条答案
按热度按时间dzhpxtsq1#
这看起来与
csv.DictReader
对象的迭代方式有关。当您对key1
的csv_file对象执行列表解析时,将耗尽迭代器。这意味着,当您尝试对key2
执行列表解析时,csv_file
中没有任何数据需要解析,后续键也是如此。相反,尝试先将CSV数据阅读到列表中,然后在此列表上执行列表解析。
试试这样的方法:
通过首先将所有行存储在all_data中,可以确保可以多次遍历这些行,而不会耗尽迭代器。