【发布时间】:2012-12-13 01:15:03
【问题描述】:
我有一个大字典 (28 MB) 'MyDict' 存储在 MyDict.py 文件中。
如果我执行语句:
from MyDict import MyDict
抛出MemoryError 异常。
如何使用cPickle 或shelve 模块访问此字典。
如何在不访问 MyDict 的情况下将此 MyDict.py 文件写入 cPickle 或 shelve。
这个 MyDict 是通过写入文件生成的。 这是字典中的键值对:
{"""ABCD""" : [[(u'2011-03-21', 35.5, 37.5, 35.3, 35.85, 10434.0, 35.85), (u'2012-03-03', 86.0, 87.95, 85.55, 86.2, 30587.0, 86.2), (u'2011-03-23', 36.9, 36.9, 35.25, 36.1, 456.0, 36.1)],
[(u'2011-03-18', 37.0, 38.0, 36.5, 36.5, 861.0, 36.5), (u'2012-03-03', 86.0, 87.95, 85.55, 86.2, 30587.0, 86.2), (u'2011-03-21', 35.5, 37.5, 35.3, 35.85, 10434.0, 35.85)],
[(u'2011-03-16', 37.0, 37.9, 36.3, 36.7, 3876.0, 36.7), (u'2012-03-03', 86.0, 87.95, 85.55, 86.2, 30587.0, 86.2), (u'2011-03-21', 35.5, 37.5, 35.3, 35.85, 10434.0, 35.85)],
[(u'2010-12-09', 40.5, 41.95, 36.3, 36.75, 42943.0, 36.75), (u'2011-10-26', 67.95, 71.9, 66.45, 70.35, 180812.0, 70.35), (u'2011-03-21', 35.5, 37.5, 35.3, 35.85, 10434.0, 35.85)],
[(u'2009-01-16', 14.75, 15.0, 14.0, 14.15, 14999.0, 14.05), (u'2010-01-11', 50.0, 52.8, 49.0, 50.95, 174826.0, 50.95), (u'2009-01-27', 14.3, 15.0, 13.9, 14.15, 3862.0, 14.15)]]}
【问题讨论】:
-
您是否尝试过使用 JSON 将大字典存储在单独的文本文件中?
-
也许数据库更适合存储这种大小的数据或使用文本格式
-
你能从这个文件中摘录一两段吗?根据文件与有效 JSON 的接近程度,您可能能够打开文件进行读取并迭代解析它以将值写入另一个将来更易于访问的文件。
-
好吧,搁置实际上是一个数据库。是的,它是一个 BDB,而不是一个 sqlite DB,但对于 OP 的用例来说,这实际上可能更好。
-
@g.d.d.c 字典值包含列表列表
标签: python dictionary pickle