加载pickle文件报错ModuleNotFoundError: No module named numpy.core.multiarray

welcome to my blog

3种可能的错误原因
  1. 看看有没有安装numpy, 导入numpy看看会不会报错, import numpy as np
  2. 读取文件的模式’r’和’rb’分别试一下
  3. 升级numpy, pip install --upgrade -i https://pypi.tuna.tsinghua.edu.cn/simple numpy,很多人都是升级numpy后解决的问题, 但是我尝试了各种版本的numpy都不行, 一直报这个错误, 最终在这个提示下终于发现了问题, 希望能够帮助大家
错误原因4: 别人在windows下使用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的使用带来麻烦…

你可能感兴趣的:(Python,pickle,python3)