我有一个非常大的csv文件(10gb),我想阅读它并创建一个字典列表,其中每个字典代表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'}]
为了避免任何内存问题,我尝试使用生成器来实现它,我当前的代码如下:
^{pr2}$问题是,由于列表变得太大,进程被终止,所以基本上它耗尽了内存。 有没有一种方法可以有效地达到同样的结果(听写列表)?我对发电机/产量很陌生,所以我甚至不知道我是否正确地使用了它。在
我还尝试使用pypy的虚拟环境,但是内存无论如何都会中断(不过稍后)。在
基本上,我想要一个字典列表的原因是我想尝试使用fastavro将csv转换成avro格式,所以任何关于如何在不创建字典列表的情况下使用fastavro(https://pypi.python.org/pypi/fastavro)的提示都会很感激
如果目标是从}'s ^{} is designed to take an iterable and write it out one record at a time ,所以您可以直接将它传递给生成器。例如,您的代码将简单地省略创建
csv
转换为avro
,那么就没有理由存储输入值的完整列表。这违背了使用发电机的全部目的。它看起来像是,在设置了一个模式之后,^{list
的步骤(注意:命名变量list
是个坏主意,因为它隐藏/隐藏了内置名称list
),而直接编写生成器:然后生成器一次生成一行,
writer
一次写入一行。写入后将丢弃输入行,因此内存使用量保持最小。在如果您需要修改行,您应该在
yield
生成程序之前修改row
生成器。在相关问题 更多 >
编程相关推荐