Help: pickle module unable to load "rb" mode files in linux

Peter Otten __peter__ at web.de
Sun Apr 7 08:51:31 EDT 2013


Surya Kasturi wrote:

> I am attaching the file which has to be read.. please take a look into it.
> The actual source code can be observed at
> 
https://github.com/scipy/SciPyCentral/blob/master/scipy_central/rest_comments/views.py#L235
> 
> 
> when we use "rb" mode in windows, its working. but its not working in
> linux system (particularly CentOS)
> 
> 
> 
> On Tue, Apr 2, 2013 at 8:50 PM, Peter Otten <__peter__ at web.de> wrote:
> 
>> Surya Kasturi wrote:
>>
>> > Hi, hope you can help me on it..
>> >
>> > with open(pickle_f, 'r') as fhand:
>> >         obj = pickle.load(fhand)
>> >
>> >
>> > This works on linux but not in windows until  I use "rb" mode while
>> > creating file object. Surprisingly, the "rb" mode is not working on
>> > Linux.. raising EOFError.
>> >
>> > Why is this happening?
>>
>> I don't know.
>>
>> Please give a complete self-contained example that uses "wb" to write the
>> file and "rb" to read it, and that fails on Linux. Don't forget to tell
>> us the version of Python you used to run that script.

I am using Linux, but I cannot reproduce an EOFError with the attached file:

Python 2.7.2+ (default, Jul 20 2012, 22:15:08) 
[GCC 4.6.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import pickle
>>> with open("index.fpickle", "rb") as f:
...     obj = pickle.load(f)
... 
>>> obj
{'body': u'<p>yahoo</p>\n', 'prev': None, 'display_toc': False, 'title': 
u'<no title>', 'sourcename': 'index.txt', 'customsidebar': None, 
'current_page_name': 'index', 'next': None, 'rellinks': [('genindex', 
u'General Index', 'I', u'index')], 'meta': {}, 'parents': [], 'toc': u'<ul 
class="simple">\n</ul>\n', 'sidebars': None, 'metatags': ''}

As the data has only built-in types it cannot be a library thing either.

Given that the file's location is determined dynamically

[views.py]
    call_sphinx_to_compile(settings.SPC['comment_compile_dir'])

    pickle_f = ''.join([settings.SPC['comment_compile_dir'], os.sep,
                        '_build', os.sep, 'pickle', os.sep, 
'index.fpickle'])
    with open(pickle_f, 'rb') as fhand:
        obj = pickle.load(fhand)

I'd add a

print pickle_f

statement just before the with-statement to ensure that you don't have two 
different pickle files, one of them being empty or otherwise broken.




More information about the Python-list mailing list