取消标记文件时的值错误

时间:2015-04-10 10:40:12

标签: python file pickle

我收到了一个包含两个pickle对象的文件 - 它是以.pk文件的形式发送给我的。我被告知它有两个对象,但是,我尝试取消这些文件取消是不成功的。

第一个腌制对象包含带有罗马数字的数字对的字典,第二个包含带有数字的罗马数字的字典对。我该如何单独拆除这两个词典?

这是我在下面的内容,以及我收到的错误消息:

import pickle
x,y=pickle.load(open("C://Users//Documents//roman.pk", "rb"))
print(x,y)

错误讯息:

ValueError: too many values to unpack (expected 2)

2 个答案:

答案 0 :(得分:3)

pickle.load只会加载它在文件中找到的第一个pickle对象。在您的情况下,这是一个包含两个以上键的字典,因此x, y = pickle.load(...)失败,因为它试图将字典的键解包到标识符xy

相反,您应该{1}}一次文件,并open两次:

load

或者,鼓励向您提供文件的人将两个词典放入单个对象中,例如单个对象的元组with open("...roman.pk") as file_: first_dict = pickle.load(file_) # file pointer is now at end of first object second_dict = pickle.load(file_) # read in second object (first_dict, second_dict);这比依赖于确切知道文件中有多少腌制对象要容易得多。

答案 1 :(得分:-1)

pickle.load应该将数据结构加载到一个参数中。 如果你在roman.pk中有2个字典,它取决于2字典的分组方式

例如(dict1,dict2)

在这种情况下: 你可能想尝试: (x,y)= pickle.load(打开(" C://Users//Documents//roman.pk" ;," rb")) print len(x) print len(y) 检查它是否正确加载