我有一个相当大的字典,大约有4千万个密钥,我只是通过将{key: value, key: value, ...}
写入文本文件而天真存储。我没有考虑到我无法真实地访问这些数据的事实,因为python厌恶加载和评估1.44GB文本文件作为字典。
我知道我可以使用类似shelve
的内容来访问数据而无需一次性读取所有数据,但我不确定如何将此文本文件转换为搁置文件没有重新生成所有数据(我不想这样做)。有没有更好的替代方案来存储,访问,并可能在以后更改这么多数据?如果没有,我应该如何将这种怪物转换为shelve可用的格式?
如果重要,字典的格式为{(int, int, int int): [[int, int], Bool]}
答案 0 :(得分:0)
答案 1 :(得分:0)
https://github.com/dagnelies/pysos
https://github.com/dagnelies/pysos
它像普通的python dict
一样工作,但具有的优势是,它在Windows上比shelve
效率高得多,并且它也是跨平台的,这与shelve
数据存储不同基于操作系统。
要安装:
pip install pysos
用法:
import pysos
db = pysos.Dict('somefile')
db['hello'] = 'persistence!'
仅给出一个大致数字,这是一个迷你基准测试(在Windows笔记本电脑上):
import pysos
t = time.time()
import time
N = 100 * 1000
db = pysos.Dict("test.db")
for i in range(N):
db["key_" + str(i)] = {"some": "object_" + str(i)}
db.close()
print('PYSOS time:', time.time() - t)
# => PYSOS time: 3.424309253692627
生成的文件约为3.5 Mb。
因此,在您的情况下,如果一百万个键/值对插入大约需要1分钟时间,那么插入所有内容大约需要一个小时。当然,机器的规格可能会影响很大。这只是一个非常的粗略估计。