Pickled text file causing ValueError (dos/unix issue)
John Machin
sjmachin at lexicon.net
Fri Jan 14 15:32:48 EST 2005
On Fri, 14 Jan 2005 09:12:49 -0500, Tim Peters <tim.peters at gmail.com>
wrote:
>[Aki Niimura]
>> I started to use pickle to store the latest user settings for the tool
>> I wrote. It writes out a pickled text file when it terminates and it
>> restores the settings when it starts.
>...
>> I guess DOS text format is creating this problem.
>
>Yes.
>
>> My question is "Is there any elegant way to deal with this?".
>
>Yes: regardless of platform, always open files used for pickles in
>binary mode. That is, pass "rb" to open() when reading a pickle file,
>and "wb" to open() when writing a pickle file. Then your pickle files
>will work unchanged on all platforms. The same is true of files
>containing binary data of any kind (and despite that pickle protocol 0
>was called "text mode" for years, it's still binary data).
Tim, the manual as of version 2.4 does _not_ mention the need to use
'b' on OSes where it makes a difference, not even in the examples at
the end of the chapter. Further, it still refers to protocol 0 as
'text' in several places. There is also a reference to protocol 0
files being viewable in a text editor.
In other words, enough to lead even the most careful Reader of TFM up
the garden path :-)
Cheers,
John
More information about the Python-list
mailing list