[英]How to load 2 big dict in Python?
我是Python的新手。 从两个文件加载两个字典时,出现内存错误。 这两个文件是
with open(filename, 'rb') as f:
hashtable_album = {}
for line in f:
# print i
p = 0
q = line.find("####")
# print p
# print q
itembuf = line[p:q]
# print itembuf
dictbuf = line[q + 4:-1]
# print line
a = json.loads(dictbuf)
# print a
# print type(a)
hashtable_album[itembuf] = a
f.close()
with open(filename2, 'rb') as f2:
hashtable_item={}
i=0
for line in f:
print len(dic)
print i
#print line
p = 0
q = line.find("####")
# print p
# print q
itembuf = line[p:q]
# print itembuf
dictbuf = line[q + 4:-1]
# print line
a = json.loads(dictbuf)
#print a
# print type(a)
hashtable_item[itembuf] = a
i=i+1
f2.close()
第一个文件大约为400MB,大于第二个文件的大约200MB,我可以成功加载第一个文件,但是当我加载第二个文件时,出现内存错误
Traceback (most recent call last):
File "E:/py_workspace/1.0_memory_error.py", line 44, in <module>
hashtable_item[itembuf] = a
MemoryError
如果我先更改了将文件加载为读取文件2的顺序,然后又更改了文件1,则在加载第二个文件时也会出现内存错误。 我想内存错误来自dict,所以我将file1加载为后清除了dict
hashtable_album = {}
然后继续加载file2。 这次它没有内存错误。 但是我需要同时使用这两个字典。 那么如何将它们一起加载?
提示:我尝试了cPickle来保存字典,但无法正常工作,并且我也遇到了内存错误。
您可能正在运行32位python。
通过验证
$ python -c "import sys; print sys.maxint" // 64-bit python
9223372036854775807
$ python-32 -c "import sys; print sys.maxint" // 32-bit
2147483647
如果无法摆脱在32位空间中运行的问题,那么您有两种选择
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.