一、问题描述
python2保存pickle文件M,python3读取报错:
a bytes-like object is required, not 'str'
二、解决方法
数据文件是在Python2下序列化的,所以使用Python3读取时,需要将‘str’转化为'bytes'
class StrToBytes:
def __init__(self, fileobj):
self.fileobj = fileobj
def read(self, size):
return self.fileobj.read(size).encode()
def readline(self, size=-1):
return self.fileobj.readline(size).encode()
小的例子:
with open('final_project_dataset.pkl', 'r') as data_file:
data_dict = pickle.load(StrToBytes(data_file))
含有中文字符的话,在类函数里,编码时要制定编码格式,某些字符GBK不支持会报错,如指定为'UTF8'、'GB2312'
三、小建议
在保存的时候直接保存为wb,猜测读取时直接用rb读取就不会这么麻烦,没有实际实验,如有朋友有测试结果,欢迎评论。