【问题标题】:Python pickling returning a string when I've pickled a dict?当我腌制一个字典时,Python腌制返回一个字符串?
【发布时间】:2011-02-28 14:58:58
【问题描述】:

我目前正在学习 Python 中的酸洗,但我对一个错误感到困惑,我抱怨我正在初始化的 unpickled 变量没有我想要使用的特定属性。

我正在挑选脚本数据的字典,然后尝试使用以下代码将其 unpickle.load 返回:

def loadData():
    global script_data_filepath
    with open(script_data_filepath) as script_data_file:
        data_to_load = pickle.load(script_data_file)
        for data_item in data_to_load.items():
            print(data_item[0])
            print(data_item[1])

问题在于 Python 说 items() 不是 data_to_load 的属性,因为 data_to_load 的类型是“str”。在我给出的代码中,这是第一次声明 data_to_load ,我强调它会动态地采用分配给它的任何类型(它应该是一个字典,因为我知道将从这个文件中加载它)。

【问题讨论】:

  • 由于问题不在您粘贴的代码中(如果此代码出错,那么腌制的字符串),您可以将代码添加到你腌制数据?您是否尝试过对字符串进行腌制和解封作为测试?还要腌制到protocol=0,并检查是否腌制了正确的对象。
  • 随机建议:如果要存储数据,请使用搁置或数据库(即 sqlite)。 Pickle 仅适用于最琐碎的情况。
  • 有趣 - 我从来没有遇到过 Pickle 的问题。而且你知道 shelve 只是泡菜的包装,对吧?
  • 嘿伙计们 - 对不起,原来我在做一些非常愚蠢的事情。我还没有使用字典使用我的新保存机制进行保存(我仍然只是保存一个字符串)。现在效果很好。谢谢您的帮助。 :)

标签: python dictionary pickle


【解决方案1】:

应该可以。您发布的代码很好。你怎么扔的?您使用pickle.dump,而不是pickle.dumps 作为字符串?您的问题几乎肯定出在转储代码中。

>>> import cPickle
>>> foo = {4:2}
>>> cPickle.dump(foo, open('foo.pickle', 'wb'))
>>> data_to_load = cPickle.load(open('foo.pickle'))
>>> data_to_load.items()
[(4, 2)]

【讨论】:

  • 感谢您的帮助和建议。我发现我在做一些愚蠢的事情并且还没有使用我的新保存方法(保存字典),所以我真的是在加载一个字符串。感谢您的帮助。
猜你喜欢
  • 2011-05-04
  • 2018-08-18
  • 1970-01-01
  • 1970-01-01
  • 2016-02-21
  • 2015-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多