如何酸洗和去角质

dsh*_*hri 6 python pickle python-3.x

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()
Run Code Online (Sandbox Code Playgroud)

当我运行上面的代码时,我得到以下错误

line 6, in <module>
pickle.dump(variety, pickleFile)
TypeError: must be str, not bytes
Run Code Online (Sandbox Code Playgroud)

我不确定变量'test'中的unpickling是否可能因为我用变量'variety'腌制了

Kev*_*vin 12

根据help(pickle.dump)

文件参数必须具有接受单个字节的参数写()方法。因此,它可以是为二进制写入而打开的文件对象、io.BytesIO 实例或任何其他符合此接口的自定义对象。

看起来您必须以二进制模式打开文件。不要忘记对loading 也做同样的事情。

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()
Run Code Online (Sandbox Code Playgroud)

结果:

variety :  ['sweet', 'box', 'cat']  shape :  ['back', 'spear', 'log']
Run Code Online (Sandbox Code Playgroud)