我在变量中加载了一个字典,如下所示
>>constellation_dict["AND"]
array([[ 2.35357132e+01, 3.51897736e+01],
[ 2.34684925e+01, 3.51880264e+01],
[ 2.34012642e+01, 3.51860695e+01],
[ 2.33340359e+01, 3.51838989e+01],
[ 2.32668228e+01, 3.51815186e+01],
....
[ 2.36029453e+01, 3.51913109e+01]])
字典有88个密钥,每个值对应十分之一对的数组。所有数据都是不变的(对应于星座边界)
目前我可以使用pickle方法加载(并最终保存它)。我的问题是:有没有办法将它存储为python代码或类似代码,所以我可以将其作为模块部分加载,而不是每次调用模块时都不必读取文件?
我尝试使用json模块将其转换为简单的代码,但它说“对象不可序列化”。
顺便说一句,这些是我目前用来加载/保存字典的方法
import pickle
def save_obj(obj, name, protocol = pickle.HIGHEST_PROTOCOL):
with open('obj/'+ name + '.pkl', 'wb') as f:
#posible alternative protocol 0 (text_format)
pickle.dump(obj, f, protocol)
def load_obj(name ):
with open('obj/' + name + '.pkl', 'r') as f:
return pickle.load(f)
constellation_dictionary = load_obj('const_dict.dat')
答案 0 :(得分:0)
您是否尝试过fromfile和tofile(http://docs.scipy.org/doc/numpy/reference/generated/numpy.fromfile.html)。它简单快捷。
其他选项是创建一个模块,里面的字典作为变量,如: data.py:
consmap = {'AND' : [[....]],
...
'OTHERKEY' : [[]]}
和其他模块:
from data import consmap
print consmap['AND']
答案 1 :(得分:0)
如果您想要替代pickle
或json
,可以使用klepto
。
>>> init = {'y': 2, 'x': 1, 'z': 3}
>>> import klepto
>>> cache = klepto.archives.file_archive('memo', init, serialized=False)
>>> cache
{'y': 2, 'x': 1, 'z': 3}
>>>
>>> # dump dictionary to the file 'memo.py'
>>> cache.dump()
>>>
>>> # import from 'memo.py'
>>> from memo import memo
>>> print memo
{'y': 2, 'x': 1, 'z': 3}
使用klepto
,如果您使用了serialized=True
,则字典将被编写为memo.pkl
作为pickle字典而不是明文(作为可导入的python代码)。
您可以在此处klepto
获取https://github.com/uqfoundation/klepto
您可以配置klepto
将字典存储到文件,目录上下文或SQL数据库。无论您选择哪种API作为后端存档,API都是相同的。它为您提供了一个“可存档”字典,您可以使用load
和dump
与存档进行交互。您还可以选择存储格式,其中klepto
可以配置为使用pickle
或json
或作为字符串存储数据,或作为哈希,或其他几种编码方法持久性商店中的关键和价值。