我有一个非常大的csv文件(10 GB),我想阅读它并创建一个词典列表,其中每个词典表示csv中的一行。 喜欢的东西从大csv创建词典列表
[{'value1': '20150302', 'value2': '20150225','value3': '5', 'IS_SHOP': '1', 'value4': '0', 'value5': 'GA321D01H-K12'},
{'value1': '20150302', 'value2': '20150225', 'value3': '1', 'value4': '0', 'value5': '1', 'value6': 'GA321D01H-K12'}]
我想,以避免任何的记忆问题,使用发电机来实现它,我当前的代码如下:
def csv_reader():
with open('export.csv') as f:
reader = csv.DictReader(f)
for row in reader:
yield {key: value for key, value in row.items()}
generator = csv_reader()
list = []
for i in generator:
list.append(i)
的问题是,基本上用完由于列表变得太大而导致进程中断,因此内存不足。 有没有办法以有效的方式实现相同的结果(字典列表)?我很新的发电机/产量,所以我甚至不知道我是否正确使用它。
我也尝试使用pypy的虚拟环境,但内存仍然中断(稍后虽然)。
基本上我为什么要,将不胜感激
,我想尝试使用fastavro等如何使用fastavro( https://pypi.python.org/pypi/fastavro)任何提示到CSV转换成Avro的格式,而无需创建一个字典列表字典它的列表的原因
如果您存储了生成器的完整结果,则说明您没有保存内存。如果目标是逐行处理文件,然后逐行处理,则不要存储它。另外,注意:当你已经有一个非常好的'dict'时,'yield {key:key的值,row.items()}中的值'只是浅拷贝'dict',直接'yield row' 。 – ShadowRanger