import numpy as np
pip install --upgrade -i https://pypi.tuna.tsinghua.edu.cn/simple numpy
,很多人都是升级numpy后解决的问题, 但是我尝试了各种版本的numpy都不行, 一直报这个错误, 最终在这个提示下终于发现了问题, 希望能够帮助大家pickle.dump(obj, 'filename', 'w')
生成的pickle文件, 我在linux下读取这个文件'w’这种模式下, python将数据以文本的形式进行存储, windows下涉及文本的符号和linux的并不完全对应, 所以在linux下使用python的pickle模块解析该pickle文件会报错. 我突然想起来去年有位大佬跟我说使用pickle可能会产生问题, 因为会跟系统环境有关, 当时我还不理解… 原来是这么一回事, 踩过坑之后就能记住了
在windows下使用pickle解析该文件, 再以’wb’模式生成pickle文件, 代码如下
# 在windows下使用pickle解析该文件
with open('train_id.pickle','r') as f:
string = f.read()
b = bytes(string,'ascii')
res = pickle.loads(b)
# 再以'wb'模式生成pickle文件
with open('train_id2.pickle','wb') as f:
pickle.dump(res, f)
# 至此问题已解决
# 以'rb'模式读取新的pickle文件即可
with open('train_id2.pickle','rb') as f:
res = pickle.load(f)
有个pickle文件在windows下也无法解析, 进一步了解到, 即使在windows下使用’wb’模式生成pickle文件, 在另一台windows下可不一定能够解析!
根本原因: 两台windows上的python版本不同, 一台用的python2, 另一台用的python3
python2和python3在生成pickle时也有差距, 换句话说, python2使用’wb’模式生成的pickle文件, 使用python3不一定能够解析
解决办法:安装python2, 安装numpy, 重新解析该pickle文件, 根据数据的类型, 以普通的方式写到硬盘上, 不用pickle了
所以说, python版本的不同, 系统的不同都会给pickle的使用带来麻烦…