Greetings,
I am trying to pickle an array of objects with a typecode of Object.
Ultimately this array will be in a class I create based on UserArray,
but the following illustrates a problem I am having. See code at the
end of the message.
I am working in Windows 2000, Service Pack 1, using PythonWin,
win32all build 140. I am using the following versions of python stuff
Python: 2.1.1 (#20, Jul 20 2001, 01:19:29) [MSC 32 bit (Intel)]
Numeric: 20.2.0
cPickle: 1.71
I create a simple array with a type of Object, pickle it to a file using
cPickle. I then run this script in PythonWin. I can unpickle this file
from PythonWin, but not from DOS window. Alternatively, I can
pickle the array from DOS, and unpickle it from DOS, but not from
PythonWin. If I save both versions of the file and compare them,
they are the same size, but not the same bytes. This does not
happen with other types for the array.
When unpickling, I get a GPF, either from PythonWin.exe or
Python.exe.
Any ideas?
My ultimate goal is to be able to store simple class objects in the
array and be able to pickle and unpickle them.
----- CODE ----
# simple test for pickling problem
import Numeric
import cPickle
import sys
basePath = "c:\\python21\\scripts\\pickle\\"
print "++++++"
# create a simple array of object, populated by integer data
ds1 = Numeric.array([1,2,3,4], 'O')
print ds1, ds1.typecode()
print "Python: ", sys.version
print "Numeric: " , Numeric.__version__
print "cPickle: ", cPickle.__version__
pickle = 1 # change to 0 to skip the pickling step
for ii in (range(1,2)):
if pickle:
fileName = "%s%s%d%s" % (basePath, "simple", ii, ".pck")
print "pickling ", fileName
fp = open(fileName, 'wb')
cPickle.dump(ds1, fp, 1)
fp.close()
for ii in range(1,2):
fileName = "%s%s%d%s" % (basePath, "simple", ii, ".pck")
print "unpickling ", fileName
fp = open(fileName, 'rb')
obj = cPickle.load(fp)
fp.close()
print obj, obj.typecode()
|