Python序列化后返回字符串而不是字典?

0 投票
1 回答
2365 浏览
提问于 2025-04-16 12:40

我现在正在学习Python中的“序列化”(也叫“持久化”),但是我遇到了一个错误,提示我初始化的变量在解序列化时没有我想用的某个属性,这让我很困惑。

我把一个字典(也就是脚本的数据)进行了序列化,然后试图用下面的代码把它解序列化:

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说data_to_load没有items()这个属性,因为data_to_load的类型是'str'(字符串)。在我给出的代码中,data_to_load是第一次被声明的,我原以为它会根据赋给它的值动态改变类型(我认为它应该是一个字典,因为我知道从这个文件里加载的就是字典)。

1 个回答

3

这应该没问题。你发的代码是可以的。你是怎么保存数据的?你是用 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)]

撰写回答