Python 3.x ModuleNotFoundError:没有名为';numpy.core.multiarray\r';

Python 3.x ModuleNotFoundError:没有名为';numpy.core.multiarray\r';,python-3.x,numpy,Python 3.x,Numpy,我正在尝试加载pkl文件 pkl_file = open(sys.argv[1], 'rb') world = pickle.load(pkl_file) 但是我从这些行中得到一个错误 Traceback (most recent call last): File "E:/python/test.py", line 186, in <module> world = pickle.load(pkl_file) ModuleNotFoundError: No module named

我正在尝试加载pkl文件

pkl_file = open(sys.argv[1], 'rb')
world = pickle.load(pkl_file)
但是我从这些行中得到一个错误

Traceback (most recent call last):
File "E:/python/test.py", line 186, in <module>
world = pickle.load(pkl_file)
ModuleNotFoundError: No module named 'numpy.core.multiarray\r'
回溯(最近一次呼叫最后一次):
文件“E:/python/test.py”,第186行,在
world=pickle.load(pkl_文件)
ModuleNotFoundError:没有名为'numpy.core.multiarray'的模块\r\n

我使用的是Windows 10、python 3.7,并安装了四个软件包(numpy 1.17.2、opencv python 4.1.1.26、pip 19.2.3、setuptools 41.2.0)。我尝试将“rb”更改为“r”,但仍然出现错误,如何解决此问题?

我认为这里有两个问题

首先,pickle是或包含一个对象,它不是标准库的一部分。因此,在尝试加载pickled对象之前,必须确保将NumPy安装到当前Python环境中并导入。根据您的设置,安装可能非常简单

pip install numpy
那么你必须加一行

将numpy导入为np
到脚本的顶部

其次,Python似乎遇到了这样的情况:您的二进制文件被错误地保存为Windows上的文本,导致每个
'\n'
都被转换为
'\r\n'
。若要解决此问题,必须将其重新转换为
'\r\n'
返回到
'\n'
。只要文件不太大,这通常不是很痛苦

下面是一个相对完整的示例:

导入系统 将numpy作为np导入 src=sys.argv[1]#文件的路径 data=open(src).read().replace('\r\n','\n')#读取并替换文件内容 dst=src+“.tmp” 打开(dst,“w”)。写入(数据)#保存临时文件 world=pickle.load(open(dst,“rb”),编码class='latin1')
好的,我必须自己解决这个问题,我解决了它。您只需将所有“\r\n”更改为“\n”。您可以通过多种方式来实现这一点。您可以进入Notepad++并将行尾从CR LF更改为just LF。或者您可以通过编程方式执行

open(newfile, 'w', newline = '\n').write(open(oldfile, 'r').read())

您是否
导入pickle
是的,在顶部添加了导入pickle您是否导入了sys?请显示所有导入。@fmw42是,显然是@bigbb imported
sys
。该错误与pickle对象是/包含
numpy
对象有关。导入
numpy
可能会解决此问题,但我怀疑这仍然会引发相同的错误,因为换行符
/r
不应该存在。