如何腌制和去腌制
How to pickle and unpickle
import pickle
variety = ["sweet", "box", "cat"]
shape = ["back","spear", "log"]
pickleFile = open("pickle.txt", 'w')
pickle.dump(variety, pickleFile)
pickle.dump(shape, pickleFile)
pickleFile.close()
pickleFile = open("pickle.txt", 'r')
test = pickle.load(pickleFile)
shape = pickle.load(pickleFile)
print ("variety : ", test, " shape : ", shape)
pickleFile.close()
当我 运行 以上代码时,我得到以下错误
line 6, in <module>
pickle.dump(variety, pickleFile)
TypeError: must be str, not bytes
而且我不确定是否可以在变量 'test' 中进行 unpickling
或者不是因为我用变量 'variety'
腌制了
根据help(pickle.dump)
,
The file argument must have a write() method that accepts a single
bytes argument. It can thus be a file object opened for binary
writing, a io.BytesIO instance, or any other custom object that meets
this interface.
看来您必须以二进制模式打开文件。不要忘记对 load
ing 也做同样的事情。
import pickle
variety = ["sweet", "box", "cat"]
shape = ["back","spear", "log"]
pickleFile = open("pickle.txt", 'wb')
pickle.dump(variety, pickleFile)
pickle.dump(shape, pickleFile)
pickleFile.close()
pickleFile = open("pickle.txt", 'rb')
test = pickle.load(pickleFile)
shape = pickle.load(pickleFile)
print ("variety : ", test, " shape : ", shape)
pickleFile.close()
结果:
variety : ['sweet', 'box', 'cat'] shape : ['back', 'spear', 'log']
您的问题是您正试图将腌制对象写入文本文件。这就像尝试用 MS word 编写数据库。
腌制文件的正确文件扩展名是“.pkl”。该文件还必须以二进制模式写入和读取。
我的建议是将文件扩展名更改为“.pkl”,然后使用两个 with
循环来整理您的代码。加载和写入的更正就像将 'w'
更改为 'wb'
一样简单,结果如下所示:
import pickle
variety = ["sweet", "box", "cat"]
shape = ["back","spear", "log"]
with open("pickle.pkl", 'wb') as pickleFile:
pickle.dump(variety, pickleFile)
pickle.dump(shape, pickleFile)
pickleFile.close()
with open("pickle.pkl", 'rb') as pickleFile:
test = pickle.load(pickleFile)
shape = pickle.load(pickleFile)
print ("variety : ", test, " shape : ", shape)
pickleFile.close()
import pickle
variety = ["sweet", "box", "cat"]
shape = ["back","spear", "log"]
pickleFile = open("pickle.txt", 'w')
pickle.dump(variety, pickleFile)
pickle.dump(shape, pickleFile)
pickleFile.close()
pickleFile = open("pickle.txt", 'r')
test = pickle.load(pickleFile)
shape = pickle.load(pickleFile)
print ("variety : ", test, " shape : ", shape)
pickleFile.close()
当我 运行 以上代码时,我得到以下错误
line 6, in <module>
pickle.dump(variety, pickleFile)
TypeError: must be str, not bytes
而且我不确定是否可以在变量 'test' 中进行 unpickling 或者不是因为我用变量 'variety'
腌制了根据help(pickle.dump)
,
The file argument must have a write() method that accepts a single bytes argument. It can thus be a file object opened for binary writing, a io.BytesIO instance, or any other custom object that meets this interface.
看来您必须以二进制模式打开文件。不要忘记对 load
ing 也做同样的事情。
import pickle
variety = ["sweet", "box", "cat"]
shape = ["back","spear", "log"]
pickleFile = open("pickle.txt", 'wb')
pickle.dump(variety, pickleFile)
pickle.dump(shape, pickleFile)
pickleFile.close()
pickleFile = open("pickle.txt", 'rb')
test = pickle.load(pickleFile)
shape = pickle.load(pickleFile)
print ("variety : ", test, " shape : ", shape)
pickleFile.close()
结果:
variety : ['sweet', 'box', 'cat'] shape : ['back', 'spear', 'log']
您的问题是您正试图将腌制对象写入文本文件。这就像尝试用 MS word 编写数据库。
腌制文件的正确文件扩展名是“.pkl”。该文件还必须以二进制模式写入和读取。
我的建议是将文件扩展名更改为“.pkl”,然后使用两个 with
循环来整理您的代码。加载和写入的更正就像将 'w'
更改为 'wb'
一样简单,结果如下所示:
import pickle
variety = ["sweet", "box", "cat"]
shape = ["back","spear", "log"]
with open("pickle.pkl", 'wb') as pickleFile:
pickle.dump(variety, pickleFile)
pickle.dump(shape, pickleFile)
pickleFile.close()
with open("pickle.pkl", 'rb') as pickleFile:
test = pickle.load(pickleFile)
shape = pickle.load(pickleFile)
print ("variety : ", test, " shape : ", shape)
pickleFile.close()