cPickle导入错误:没有名为multiarray的模块

4 投票
5 回答
12420 浏览
提问于 2025-04-15 23:44

我正在使用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)`

错误信息是(在这两种情况下都出现):

    Traceback (most recent call last):
  File "D:\programy\projekt_eclipse\src\Praca\wx_frame.py", line 342, in LoadDatabase_Handler
    Load_DataBase()
  File "D:\programy\projekt_eclipse\src\Praca\wx_frame.py", line 1804, in Load_DataBase
    A= cPickle.load(plik)
ImportError: No module named multiarray

有什么想法吗?

补充一下,我现在部分解决了这个问题 :/ 我需要改变数组的格式。我试着追踪这个错误,但没能找到原因。导致错误的变量是这个(很长 :) ):

[[  0.00000000e+00   0.00000000e+00   0.00000000e+00   0.00000000e+00
    0.00000000e+00   0.00000000e+00   0.00000000e+00   0.00000000e+00]
 [  1.00000000e+00   0.00000000e+00   0.00000000e+00   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   0.00000000e+00]
 [  2.00000000e+00   0.00000000e+00   1.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   3.52875186e+04]
 [  3.00000000e+00   0.00000000e+00   2.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   2.24880978e+04]
 [  4.00000000e+00   0.00000000e+00   3.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   2.24880978e+04]
 [  5.00000000e+00   0.00000000e+00   4.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   2.24880978e+04]
 [  6.00000000e+00   0.00000000e+00   5.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   2.24880978e+04]
 [  7.00000000e+00   0.00000000e+00   6.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   2.24880978e+04]
 [  8.00000000e+00   0.00000000e+00   7.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   3.59846476e+04]
 [  9.00000000e+00   0.00000000e+00   8.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   0.00000000e+00]
 [  1.00000000e+01   1.00000000e+03   0.00000000e+00   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   3.97583022e+04]
 [  1.10000000e+01   1.00000000e+03   1.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   1.84929461e+04]
 [  1.20000000e+01   1.00000000e+03   2.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   8.76891311e+03]
 [  1.30000000e+01   1.00000000e+03   3.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   5.10636164e+03]
 [  1.40000000e+01   1.00000000e+03   4.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   2.45841100e+03]
 [  1.50000000e+01   1.00000000e+03   5.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   4.22093915e+03]
 [  1.60000000e+01   1.00000000e+03   6.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   9.20282091e+03]
 [  1.70000000e+01   1.00000000e+03   7.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   1.86566159e+04]
 [  1.80000000e+01   1.00000000e+03   8.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   3.80902598e+04]
 [  1.90000000e+01   2.00000000e+03   0.00000000e+00   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   2.23193676e+04]
 [  2.00000000e+01   2.00000000e+03   1.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   1.16000116e+04]
 [  2.10000000e+01   2.00000000e+03   2.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   9.05680012e+03]
 [  2.20000000e+01   2.00000000e+03   3.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   6.89123867e+03]
 [  2.30000000e+01   2.00000000e+03   4.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   4.98898168e+03]
 [  2.40000000e+01   2.00000000e+03   5.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   7.44216130e+03]
 [  2.50000000e+01   2.00000000e+03   6.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   1.23593332e+04]
 [  2.60000000e+01   2.00000000e+03   7.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   1.14424233e+04]
 [  2.70000000e+01   2.00000000e+03   8.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   1.91864355e+04]
 [  2.80000000e+01   3.00000000e+03   0.00000000e+00   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   2.07766798e+04]
 [  2.90000000e+01   3.00000000e+03   1.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   8.61849685e+03]
 [  3.00000000e+01   3.00000000e+03   2.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   1.09785208e+04]
 [  3.10000000e+01   3.00000000e+03   3.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   8.99736773e+03]
 [  3.20000000e+01   3.00000000e+03   4.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   9.06209122e+03]
 [  3.30000000e+01   3.00000000e+03   5.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   9.48702707e+03]
 [  3.40000000e+01   3.00000000e+03   6.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   1.04653099e+04]
 [  3.50000000e+01   3.00000000e+03   7.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   6.25314801e+03]
 [  3.60000000e+01   3.00000000e+03   8.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   1.67608539e+04]
 [  3.70000000e+01   4.00000000e+03   0.00000000e+00   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   2.07766798e+04]
 [  3.80000000e+01   4.00000000e+03   1.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   6.82241178e+03]
 [  3.90000000e+01   4.00000000e+03   2.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   8.05149043e+03]
 [  4.00000000e+01   4.00000000e+03   3.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   9.55692239e+03]
 [  4.10000000e+01   4.00000000e+03   4.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   1.19199226e+04]
 [  4.20000000e+01   4.00000000e+03   5.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   8.43876335e+03]
 [  4.30000000e+01   4.00000000e+03   6.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   4.90454231e+03]
 [  4.40000000e+01   4.00000000e+03   7.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   6.03525083e+03]
 [  4.50000000e+01   4.00000000e+03   8.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   1.67608539e+04]
 [  4.60000000e+01   5.00000000e+03   0.00000000e+00   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   2.07766798e+04]
 [  4.70000000e+01   5.00000000e+03   1.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   6.07842319e+03]
 [  4.80000000e+01   5.00000000e+03   2.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   6.48191278e+03]
 [  4.90000000e+01   5.00000000e+03   3.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   1.06547361e+04]
 [  5.00000000e+01   5.00000000e+03   4.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   1.27500595e+04]
 [  5.10000000e+01   5.00000000e+03   5.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   9.62319628e+03]
 [  5.20000000e+01   5.00000000e+03   6.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   6.50364667e+03]
 [  5.30000000e+01   5.00000000e+03   7.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   6.48651846e+03]
 [  5.40000000e+01   5.00000000e+03   8.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   1.67608539e+04]
 [  5.50000000e+01   6.00000000e+03   0.00000000e+00   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   2.16862400e+04]
 [  5.60000000e+01   6.00000000e+03   1.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   9.88311307e+03]
 [  5.70000000e+01   6.00000000e+03   2.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   7.89923519e+03]
 [  5.80000000e+01   6.00000000e+03   3.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   8.16959736e+03]
 [  5.90000000e+01   6.00000000e+03   4.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   6.49942081e+03]
 [  6.00000000e+01   6.00000000e+03   5.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   6.24620368e+03]
 [  6.10000000e+01   6.00000000e+03   6.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   9.27811830e+03]
 [  6.20000000e+01   6.00000000e+03   7.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   1.13336356e+04]
 [  6.30000000e+01   6.00000000e+03   8.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   1.91853045e+04]
 [  6.40000000e+01   7.00000000e+03   0.00000000e+00   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   3.67326624e+04]
 [  6.50000000e+01   7.00000000e+03   1.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   1.79192625e+04]
 [  6.60000000e+01   7.00000000e+03   2.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   9.35835049e+03]
 [  6.70000000e+01   7.00000000e+03   3.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   4.66349011e+03]
 [  6.80000000e+01   7.00000000e+03   4.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   1.88664273e+03]
 [  6.90000000e+01   7.00000000e+03   5.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   4.15546726e+03]
 [  7.00000000e+01   7.00000000e+03   6.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   9.26420582e+03]
 [  7.10000000e+01   7.00000000e+03   7.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   1.80179725e+04]
 [  7.20000000e+01   7.00000000e+03   8.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   3.69846102e+04]
 [  7.30000000e+01   8.00000000e+03   0.00000000e+00   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   0.00000000e+00]
 [  7.40000000e+01   8.00000000e+03   1.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   3.66207833e+04]
 [  7.50000000e+01   8.00000000e+03   2.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   2.32529854e+04]
 [  7.60000000e+01   8.00000000e+03   3.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   2.32529854e+04]
 [  7.70000000e+01   8.00000000e+03   4.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   2.32529854e+04]
 [  7.80000000e+01   8.00000000e+03   5.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   2.32529854e+04]
 [  7.90000000e+01   8.00000000e+03   6.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   2.32529854e+04]
 [  8.00000000e+01   8.00000000e+03   7.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   3.70098656e+04]
 [  8.10000000e+01   8.00000000e+03   8.00000000e+03   2.00000000e+01
    0.00000000e+00   5.00000000e+02   2.00000000e+01   0.00000000e+00]]

cPickle或者pickle无法加载它。但是当我用控制台手动操作时,文件结构([[ ]]和所有格式完全一样,数值也都是e+00格式)就能正常工作??????这到底是怎么回事?无论如何,我通过改变数据格式解决了这个问题 :/

5 个回答

1

你有没有试过明确地导入multiarray?因为pickle在导入数据时需要所有的类都已经定义好。

2

首先,检查一下你的电脑里这个文件是否存在:$YOUR_PYTHON_INSTALLATION/lib/python-x.x/site-packages/numpy/core/multiarray.so。

另外,如果你能把完整的错误信息(也叫追踪信息)发出来,那会很有帮助,而不仅仅是错误提示。

9

我在一台运行Windows XP的电脑上遇到了同样的问题,而在Linux系统上运行的代码却没问题。这可能和文本文件和二进制文件的处理方式不同有关。当你写入数据时,试着明确地创建文件对象,告诉它你想要使用二进制模式,也就是:

plik=open(filename,'wb')

而不是

plik=open(filename,'w')

这样做对我有效。

撰写回答