2014-05-14 45 views
4

我在磁盘上大小约780兆字节(在磁盘上)腌制的字典。但是,当我将该字典加载到内存中时,其大小意外膨胀到大约6千兆字节。无论如何还要在内存中保留实际文件大小的大小(我的意思是,如果它在内存中需要大约1个演出,但是6个演出是一种奇怪的行为)。 pickle模块有问题,还是应该以其他格式保存字典?从磁盘加载的Python字典在内存中占用太多空间

这里是我正在加载文件:

import pickle 

with open('py_dict.pickle', 'rb') as file: 
    py_dict = pickle.load(file) 

任何想法,帮助,将不胜感激。

+3

我可以推荐使用'sqlite3'而不是Python字典来存储这些数据吗? –

+0

这可能是相关的:http://www.shocksolution.com/2010/01/storing-large-numpy-arrays-on-disk-python-pickle-vs-hdf5adsf/ – dano

+0

这是一个类似的问题,可能有帮助http://stackoverflow.com/questions/23261598/cpickle-load-in-python-consumes-a-large-memory – Akavall

回答

6

如果您使用pickle仅用于在字典或大量密钥中存储较大值,则应考虑使用shelve来代替。

import shelve 
s=shelve.open('shelve.bin') 
s['a']='value' 

这会将每个键/值仅在需要时,保留其余的磁盘上

+0

谢谢,这工作像一个魅力。 :-) – user2480542

1

使用SQL来存储所有的数据到数据库中,并使用有效的查询去实现它。

+0

谢谢。这非常有帮助。是的,另一个替代品肯定是使用分贝,但是文件(现在不是很大)会越来越大,可能是gigs,所以我认为在本地存储更加可行。 – user2480542

+0

如果使用SQLite,则数据库是本地的 - SW嵌入在python中,并且可以使用本地文件作为数据库。 –