【发布时间】:2022-01-07 01:03:12
【问题描述】:
问题 1。
我尝试读取大小约为 1GB 的 CSV 文件,如下所示
import csv
res = []
with open("my_csv.csv", "r") as f:
reader = csv.reader(f)
for row in reader:
res.append(row)
我认为 1GB 足够小,可以将其作为列表加载到我的内存中。但实际上,代码冻结了,内存使用率为 100%。在我运行代码之前,我检查了额外的内存只有几 GB。
This answer 说,
“您正在将所有行读入一个列表,然后处理该列表。 不要那样做。"
但我想知道为什么?为什么列表的内存比文件大得多?
问题 2。
有没有什么方法可以将 CSV 解析为 dict 而不会出现内存问题?
例如,
CSV
apple,1,2,a
apple,4,5,b
banana,AAA,0,3
kiwi,g1,g2,g3
字典
{"apple" : [[1, 2, a], [4, 5, b]],
"banana": [[AAA, 0, 3]],
"kiwi" : [[g1, g2, g3]]}
【问题讨论】:
-
您运行的是 32 位 Python 吗?你有多少内存?
-
此信息来自 CSV 的事实无关紧要。您只是在问保存数百万个字符串列表需要多少内存。
-
对。每行由一个列表对象和 4 个字符串对象加上字符串数据组成。这确实需要更多内存,尤其是在字段很小的情况下,例如您的示例。
-
@TimRoberts 64 位和 16GB。所以额外的至少是 10GB。
-
请说明您要对数据进行的处理。在读取它的同时一次执行此操作是可能的。例如如果你只是在数东西。这样文件可以是任意大小而不会导致内存问题。