[Tutor] Cannot cPickle.load()

Brian van den Broek bvande at po-box.mcgill.ca
Wed Dec 1 20:05:57 CET 2004


Tim Peters said unto the world upon 2004-11-30 20:54:

<SNIP>
> Change
>     "r"
> to
>     "rb"
> and try again.
> 
> You're on Windows, pickles are binary files, and binary files must
> always be opened in binary mode on Windows.  When you wrote the data
> to the file to begin with, I hope you opened the file in binary mode
> then too.  Else the data in the file is corrupt now.

Hi all,

Tim's post confuses me. (I've cc'ed you Tim as somehow I doubt you are a 
regular reader of Tutor -- apologies if that annoys.)

I'm on Windows with Python 2.3.4 (waiting for extension updates to use 
2.4). When I run:

<code>
import pickle

a_dict = {1:2, 3:4, 5:6}
print a_dict

pic_file = file('c:/testpickle.pic', 'w')
pickle.dump(a_dict, pic_file)
pic_file.close()

a_dict = {}
print a_dict

pic_file = file('c:/testpickle.pic', 'r')
a_dict = pickle.load(pic_file)
print a_dict
</code>

I get the output:

IDLE 1.0.3
 >>> ========================= RESTART =======================
 >>>
{1: 2, 3: 4, 5: 6}
{}
{1: 2, 3: 4, 5: 6}

Which makes it look to me like pickle is working just fine without using 
binary mode. I tried the same thing with cPickle and also made sure to 
close IDLE and try reading the pickled data in a command prompt Python.

In all cases, I recovered the pickled data without difficulty.

So, what have I misunderstood?

Thanks, and best to all,

Brian vdB



More information about the Tutor mailing list