我正在使用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()`
它工作正常。我的大多数数据库行都是列表,类似vecor或类似数组的数据集。
但是现在当我输入数据时,会发生错误:
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
任何想法?
PS。现在我已经解决了这个问题,部分说:/我需要改变数组的格式。我试图追踪错误,但我不能。导致错误的变量是这个(长:) :):
[[ 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格式)然后它工作正常???????????我勒个去? 无论如何,我已经通过changign数据格式解决了这个问题:/
答案 0 :(得分:9)
我在Windows XP机器上遇到同样的问题,Code在Linux下工作正常。它可能与文本和二进制文件的不同处理有关。在编写数据时,尝试创建文件对象,明确说明您需要二进制模式,即
plik=open(filename,'wb')
而不是
plik=open(filename,'w')
这对我有用。
答案 1 :(得分:2)
首先检查$ YOUR_PYTHON_INSTALLATION / lib / python-x.x / site-packages / numpy / core / multiarray.so文件是否存在。
如果您发布完整的回溯,而不仅仅是错误消息,那将非常有用。
答案 2 :(得分:1)
您是否尝试过明确导入多阵列? pickle需要定义所有类才能导入数据。
答案 3 :(得分:1)
这可能是由带有autocrlf的Windows机器上的git更改行结尾引起的。您会注意到,在更改分支或执行删除和重写磁盘上文件的任何其他操作之前,这不会有问题。
将此行添加到.gitattributes
文件中,以避免在类似文本(但实际上是二进制!)的pickle文件中重写行结尾:
# .gitattributes
# Pickle files are to be treated as binary.
*.p binary
*.lft binary
答案 4 :(得分:0)
您必须使用非常旧的Python。因为'import *'仅在模块级别可用。无论如何,回答你的问题:
移动这些陈述
import cPickle
from scipy import *
from numpy import *
在Load_DataBase定义之外,你会没事的。之所以引发异常,是因为cPickle无法找到plik内容的元信息。