[Tutor] Cannot cPickle.load()

Hugo González Monteverde hugonz-lists at h-lab.net
Wed Dec 1 00:16:17 CET 2004


Hi Tutors,

I think I must be missing something here. I pickled a dictionary of 
lists into a file, using protocol 2, some weeks ago.  Now I'm trying to 
load it and I can't.

File is 21kB long, so I know it has data in it, and when I read it into 
a string (without pickling) I understand the pickle is there. Here's  my 
log:

IDLE 1.0.3
 >>> import cPickle
 >>> import pickle
 >>> myfilep=open("e:\Devel\listpickled", "r")
 >>> myfilep
<open file 'e:\Devel\listpickled', mode 'r' at 0x00AA05A0>
 >>> mydict = cPickle.load(myfilep)

Traceback (most recent call last):
   File "<pyshell#4>", line 1, in -toplevel-
     mydict = cPickle.load(myfilep)
EOFError
 >>> myfilep.tell()
4096L
 >>> myfilep.seek(0)
 >>> mydict= pickle.load(myfilep)

Traceback (most recent call last):
   File "<pyshell#7>", line 1, in -toplevel-
     mydict= pickle.load(myfilep)
   File "C:\Python23\lib\pickle.py", line 1390, in load
     return Unpickler(file).load()
   File "C:\Python23\lib\pickle.py", line 872, in load
     dispatch[key](self)
   File "C:\Python23\lib\pickle.py", line 1189, in load_binput
     i = ord(self.read(1))
TypeError: ord() expected a character, but string of length 0 found
 >>> myfilep.tell()
512L
 >>> myfilep.seek(0)
 >>> mystring = myfilep.read()
 >>> mystring
'\x80\x02]q\x01(U\x05Aaronq\x02U\x04Abelq\x03U\x08Abelardoq\x04U\x07Abelinoq\x05U\x07Abigailq\x06U\x07Abrahamq\x07U\x05Abrilq\x08U\x06Abundiq\tU\x03Adaq\nU\x05Adahiq\x0bU\x06Adalayq\x0cU\tAdalbertoq\rU\x08Adalgisaq\x0eU\x06Adalidq\x0fU\x07Adamariq\x10U\x04Adelq\x11U\x05Adelaq\x12U\x08Adelaidaq\x13U\x07Adelinaq\x14U\x06Adizonq\x15U\x06Adolfoq\x16U\x06Adonayq\x17U\x06Adrianq\x18U\x07Adrianaq\x19U\x04Ad\xe1nq'
 >>> #But this is not the full contents of the file!
 >>> myfilep.tell()
20480L
 >>> len(mystring)
257
 >>> mystring = myfilep.read()
 >>> len(mystring)
157
 >>> mystring = myfilep.read()
 >>> len(mystring)
0
 >>> #ok, done with the reading
 >>>

I cannot make any sense of it. Both implementations of load() tell me 
they're encountering EOF right away. If I use read, there's the pickled 
data, but I cannot read the entire file into the variable.

Please help if possible. I don't know what elese to do... (!)

Hugo



More information about the Tutor mailing list