【问题标题】:Save dictionary on runtime as python code not using pickle在运行时将字典保存为不使用pickle的python代码
【发布时间】:2014-03-03 18:13:38
【问题描述】:

我在一个变量中加载了一个字典,如下所示

>>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]])

字典有 arround 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')

【问题讨论】:

  • 那不是字典,充其量只是一个 Numpy 数组。
  • 你那里没有字典,我想知道你叫什么'key'和'value'......
  • 既然你只是想把它变成 Python 可解释的代码,你为什么不直接做str(constellation_dictionary) 呢?

标签: python dictionary pickle


【解决方案1】:

您是否尝试过 fromfile 和 tofile (http://docs.scipy.org/doc/numpy/reference/generated/numpy.fromfile.html)。简单快捷。

其他选项是创建一个模块,其中包含字典作为变量,例如: 数据.py:

consmap = {'AND' : [[....]],
            ...
           'OTHERKEY' : [[]]}

在其他模块中:

from data import consmap
print consmap['AND']

【讨论】:

    【解决方案2】:

    如果您想要替代picklejson,您可以使用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

    您可以在此处获取kleptohttps://github.com/uqfoundation/klepto

    您可以配置 klepto 将字典存储到文件、目录上下文或 SQL 数据库中。无论您选择什么作为后端存档,API 都是相同的。它为您提供了一个“可存档”字典,您可以使用它使用loaddump 与存档进行交互。您还可以选择存储格式,其中klepto 可以配置为使用picklejson 或作为字符串,或作为哈希,或其他几种编码键和值的方法来存储您的数据持久存储。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多