将python2中的cPickle修改成python3中的pic
2019-01-02 本文已影响3人
布口袋_天晴了
为什么有pickle这种操作,并将文件存为.pkl后缀???
因为pickle可以把字典、列表等结构化数据存到本地文件,读取后返回的还是字典、列表等结构化数据。而file.write、file.read存取的对象是字符串。 读取得到的字符串需要再次加工处理才能转换为字典、列表等,所以pickle的存在是为了方便特殊类型数据的保存。
报错:ModuleNotFoundError: No module named 'cPickle'
原因:python2有cPickle,但是在python3下,是没有cPickle的;
解决办法:将cPickle改为pickle即可,但是这样还是出现编码的问题
![](https://img.haomeiwen.com/i6102062/30b5c9a48a381a0f.png)
报错:UnicodeDecodeError: 'ascii' codec can't decode byte 0xe7 in position 0: ordinal not in range(128)错误解
原因:python3中的pickle需要指定一下编码
解决办法:见下图
![](https://img.haomeiwen.com/i6102062/99edfc7e8c503a1d.png)
参考文章:
【1】pickle 在python 2和python 3中兼容性问
【2】 Pickle incompatibility of numpy arrays between Python 2 and 3