[英]Save dictionary on runtime as python code not using pickle
我將字典加載到變量中,如下所示
>>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個鍵,十分之一對數組的每個值const。 所有數據都是不變的(對應於星座邊界)
目前,我可以使用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')
您是否嘗試過fromfile和tofile( http://docs.scipy.org/doc/numpy/reference/genic/numpy.fromfile.html )。 簡單,快速。
另一個選擇是使用字典作為變量創建一個模塊,例如:data.py:
consmap = {'AND' : [[....]],
...
'OTHERKEY' : [[]]}
在其他模塊中:
from data import consmap
print consmap['AND']
如果要代替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
,則該字典將作為腌制的字典而不是使用明文(作為可導入的python代碼)寫到memo.pkl
中。
您可以在此處獲取klepto
: https : //github.com/uqfoundation/klepto
您可以配置klepto
將字典存儲到文件,目錄上下文或SQL數據庫中。 無論選擇什么作為后端存檔,API都是相同的。 它為您提供了一個“可存檔”詞典,您可以使用該詞典使用load
和dump
與存檔進行交互。 您還可以選擇存儲格式,其中klepto
可以配置為使用pickle
或json
或作為字符串,作為散列或其他在持久存儲中編碼鍵和值的其他方法來存儲數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.