Python cPickle ImportError:没有名为multiarray的模块

Python cPickle ImportError:没有名为multiarray的模块,python,serialization,numpy,pickle,Python,Serialization,Numpy,Pickle,我正在使用cPickle将数据库保存到文件中。代码如下所示: def Save_DataBase(): import cPickle from scipy import * from numpy import * a=Results.VersionName #filename='D:/results/'+a[a.find('/')+1:-a.find('/')-2]+Results.AssType[:3]+str(random.randint(0,100))+Results.Distributi

我正在使用cPickle将数据库保存到文件中。代码如下所示:

def Save_DataBase():
import cPickle
from scipy import *
from numpy import *
a=Results.VersionName
#filename='D:/results/'+a[a.find('/')+1:-a.find('/')-2]+Results.AssType[:3]+str(random.randint(0,100))+Results.Distribution+".lft"
filename='D:/results/pppp.lft'
plik=open(filename,'w')


DataOutput=[[[DataBase.Arrays.Nodes,DataBase.Arrays.Links,DataBase.Arrays.Turns,DataBase.Arrays.Connectors,DataBase.Arrays.Zones],
             [DataBase.Nodes.Data,DataBase.Links.Data,DataBase.Turns.Data,DataBase.OrigConnectors.Data,DataBase.DestConnectors.Data,DataBase.Zones.Data],
             [DataBase.Nodes.DictionaryPy2Vis,DataBase.Links.DictionaryPy2Vis,DataBase.Turns.DictionaryPy2Vis,DataBase.OrigConnectors.DictionaryPy2Vis,DataBase.DestConnectors.DictionaryPy2Vis,DataBase.Zones.DictionaryPy2Vis],
             [DataBase.Nodes.DictionaryVis2Py,DataBase.Links.DictionaryVis2Py,DataBase.Turns.DictionaryVis2Py,DataBase.OrigConnectors.DictionaryVis2Py,DataBase.DestConnectors.DictionaryVis2Py,DataBase.Zones.DictionaryVis2Py],
             [DataBase.Paths.List]],[Results.VersionName,Results.noZones,Results.noNodes,Results.noLinks,Results.noTurns,Results.noTrips,
                                     Results.Times.VersionLoad,Results.Times.GetData,Results.Times.GetCoords,Results.Times.CrossTheTime,Results.Times.Plot_Cylinder,
                                     Results.AssType,Results.AssParam,Results.tStart,Results.tEnd,Results.Distribution,Results.tVector]]



cPickle.dump(DataOutput, plik, protocol=0)
plik.close()`
而且效果很好。我的大多数数据库行都是列表、向量或类似数组的数据集的列表

但现在当我输入数据时,出现了一个错误:

def Load_DataBase():
    import cPickle 
    from scipy import *
    from numpy import *  
    filename='D:/results/pppp.lft'
    plik= open(filename, 'rb')
    """ first cPickle load approach """
    A= cPickle.load(plik)
    """ fail """
    """ Another approach - data format exact as in Output step above , also fails"""
    [[[DataBase.Arrays.Nodes,DataBase.Arrays.Links,DataBase.Arrays.Turns,DataBase.Arrays.Connectors,DataBase.Arrays.Zones],
                 [DataBase.Nodes.Data,DataBase.Links.Data,DataBase.Turns.Data,DataBase.OrigConnectors.Data,DataBase.DestConnectors.Data,DataBase.Zones.Data],
                 [DataBase.Nodes.DictionaryPy2Vis,DataBase.Links.DictionaryPy2Vis,DataBase.Turns.DictionaryPy2Vis,DataBase.OrigConnectors.DictionaryPy2Vis,DataBase.DestConnectors.DictionaryPy2Vis,DataBase.Zones.DictionaryPy2Vis],
                 [DataBase.Nodes.DictionaryVis2Py,DataBase.Links.DictionaryVis2Py,DataBase.Turns.DictionaryVis2Py,DataBase.OrigConnectors.DictionaryVis2Py,DataBase.DestConnectors.DictionaryVis2Py,DataBase.Zones.DictionaryVis2Py],
                 [DataBase.Paths.List]],[Results.VersionName,Results.noZones,Results.noNodes,Results.noLinks,Results.noTurns,Results.noTrips,
                                         Results.Times.VersionLoad,Results.Times.GetData,Results.Times.GetCoords,Results.Times.CrossTheTime,Results.Times.Plot_Cylinder,
                                         Results.AssType,Results.AssParam,Results.tStart,Results.tEnd,Results.Distribution,Results.tVector]]= cPickle.load(plik)`
错误为(在两种情况下):

有什么想法吗

另外,现在我已经解决了这个问题,比如说部分:/我需要更改数组的格式。我试过追踪错误,但我做不到。导致错误的变量如下(长:):

cPickle或pickle无法加载它。但是,当我用控制台手动执行时,相同的文件结构([[]和所有格式都完全相同,值也是e+00格式),那么它工作得很好???????????我勒个去?
无论如何,我已经通过更改数据格式解决了这个问题:/

您是否尝试显式导入多数组?pickle需要定义所有类才能导入数据。

首先检查$YOUR_PYTHON_INSTALLATION/lib/PYTHON-x.x/site-packages/numpy/core/multiarray.so文件是否存在


如果您发布了完整的回溯,而不仅仅是错误消息,这将非常有用。

我在Windows XP机器上遇到了同样的问题,代码在Linux下运行良好。这可能与文本和二进制文件的不同处理有关。在写入数据时,尝试创建文件对象,明确说明您需要二进制模式,即

plik=open(filename,'wb')
而不是

plik=open(filename,'w')

这对我很有用。

您一定在使用非常旧的Python。因为“导入*”仅在模块级别可用。无论如何,要回答您的问题:

移动这些语句

import cPickle 
from scipy import *
from numpy import *

退出Load_数据库定义,您就没事了。引发异常是因为cPickle找不到plik内容的元信息。

这可能是由于git在带有autocrlf的Windows计算机上更改行结尾造成的。您会注意到,在更改分支或执行任何其他删除和重写磁盘上文件的操作之前,这不会是一个问题。 将此行添加到
.gittributes
文件中,以避免在文本中重写行结尾,例如(但实际上是二进制的!)pickle文件:

# .gitattributes
# Pickle files are to be treated as binary. 
*.p binary
*.lft binary

你的意思是:从numpy.core导入multiarray作为multiarray不-它没有帮助。我检查过,它工作正常,文件存在,从numpy.core导入multiarray作为multiarray我也重新安装了numpy它没有帮助。我对问题进行了全面追踪我打赌你在用git?
import cPickle 
from scipy import *
from numpy import *
# .gitattributes
# Pickle files are to be treated as binary. 
*.p binary
*.lft binary