我收到了一个包含两个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)
答案 0 :(得分:3)
pickle.load
只会加载它在文件中找到的第一个pickle对象。在您的情况下,这是一个包含两个以上键的字典,因此x, y = pickle.load(...)
失败,因为它试图将字典的键解包到标识符x
和y
。
相反,您应该{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) 检查它是否正确加载