原因是因为在Python3中cPickle包已经更名为pickle,所以使用方法也相应地改变了。具体方法如下:
import pickle as cPickle
也可以直接导入pickle包更方便。
import pickle
pickle可以把字典、列表等结构化数据存到本地文件,读取后返回的还是字典、列表等结构化数据。但是file.write、file.read存取的对象是字符串。 读取得到的字符串需要再次加工处理才能转换为字典、列表等,所以pickle的存在是为了方便特殊类型数据的保存。
若将cPickle包改为pickle包之后还出现编码的问题
报错:UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xe7 in position 0: ordinal not in range
原因:python3中的pickle需要指定一下编码
解决方法如下:
方法一:
fp = open(file_name, 'rb')
u = pickle._Unpickler(fp)
u.encoding = 'latin'
params = u.load()
方法二:
fp = open(file_name, 'rb')
params = pickle.load(fp, encoding='latin')
但是有时候导入包之后也不需要指定编码,反正如果编译器没报这个错的话,也无需指定编码。