Help with cPickle for deserializing datetime.datetime instances

Mingus Tsai mytsai at u.washington.edu
Fri Oct 14 12:09:25 EDT 2005


Hans Georg Krauthaeuser wrote:
> Mingus Tsai schrieb:
> 
>>Hello- please help with unpickling problem:
>>
>>I am using Python version 2.3.4 with IDLE version 1.0.3 on a Windows
>>XPhome system.
>>
>>My problem is with using cPickle to deserialize my pickled arrays of
>>datetime.datetime instances.  The following is the code I have written:
>>
>>    import cPickle, datetime
>>    import Numeric
>>
>>#the file below contains a serialized dict with arrays of datetime
>>#objects.  When these three statements run, the IDLE crashes!
>>
>>    input1 = open('tsm2_outa','r')
>>    time1 = cPickle.load(input1)
>>    input1.close()
>>
>>#the file below contains serialized dict with arrays of built-in objects
>>#it unpickles without any problem, when I omit the above unpickling
>>#operation.
>>
>>    input2 = open('tsm2_outb','rb')
>>    data1 = cPickle.load(input2)
>>    input2.close()
>>
>>My guess is that I need to somehow tell the pickle.load command that it
>>is loading datetime instances, but I have no idea how to do this.  Any
>>help would be much appreciated.
>>
>>Thanks,
>>Ming
> 
> How did you wrote the pickle-file. If you used mode 2 you have to open
> the file with mode "rb", as you did for the other pickle file.
> 
> Hans

here's the code from my pickling:
#dict of arrays of datetime objects
export1 = {'gagetime':gagednt2ar,'gagetime_offset':gagednt2_offsetar,
         'tektime_lagb':mdntmar,'tektime':mdntzar,'tektime_lagf':mdntpar}

#dict of arrays of built-in objects
datamat = {'az':azrowfar,'el':elrowfar,'tekrange_lagb':mtmt,
            'tekrange':mtzt,'tekrange_lagf':mtpt,'teksig_lagb':mvmt,
            'teksig':mvzt,'teksig_lagf':mvpt,'gagerange':gagerange,
            'gagesig':gagesig}

time_out = open('tsm2_outa','w')
cPickle.dump(export1,time_out)
time_out.close()

data_out = open('tsm2_outb','wb')
cPickle.dump(datamat,data_out,1)
data_out.close()

------ So, you can see that the first dict is pickled in ascii (those 
arrays are pretty small), but the second dict (the one that i have no 
problem unpickling) is pickled in binary.  However, I have tried both 
ascii and binary for the frist dict, but both crash the IDLE.  I don't 
understand how pickling works with non built-in objects--is it necessary 
for me to tell it that I have datetime objects and how do i do that?

Or perhaps there's something entirely different happening?

much obliged, Ming



More information about the Python-list mailing list