python的pickle模块实现了基本的数据序列和反序列化。通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储;通过pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象。
python2使用的是cPickle模块,而在python3中cPickle已经被取消,使用python2的如下方式:
import cPickle
data = cPickle.load(open('imdb_features.p'))
这种方式是可以正常读取文件的。
但是当换做python3的方式读取文件的时候,例如:
import pickle
data = pickle.load(open('imdb_features.p'))
获得错误提示信息,如下:
TypeError: ‘str’ does not support the buffer interface
其解决办法是应该指明用二进制方式打开文件,代码改为:
import pickle
data = pickle.load(open('imdb_features.p','rb'))
于是这时错误就变成了:
UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xe8 in position 0: ordinal not in range(128)
其解决办法为:我们需要告诉pickle:how to convert Python bytestring data to Python3 strings,The default is to try and decode all string data as ASCII,所以代码改为:
import pickle
data = pickle.load(open('imdb_features.p','rb'),encoding = 'iso-8859-1')
问题得到最终解决。


858

被折叠的 条评论
为什么被折叠?



