problem with read() write()

Zeynel azeynel1 at gmail.com
Sat Oct 31 16:19:50 CET 2009


On Oct 31, 10:40 am, "Alf P. Steinbach" <al... at start.no> wrote:
Thanks! This works. But I need to close the file before read and open
it again with "r", otherwise I get the garbage again. Can you give me
the link where you got this in documentation:

"The mode 'w+' opens and truncates the file to 0 bytes, while 'r+'
opens the
>     file without truncation."

Only place i could find it was in this bug report: http://bugs.python.org/issue5061

> * Zeynel:
>
>
>
>
>
> > On Oct 31, 9:55 am, "Alf P. Steinbach" <al... at start.no> wrote:
> >> * Zeynel:
>
> >>> On Oct 31, 9:23 am, "Alf P. Steinbach" <al... at start.no> wrote:
> >>>> * Zeynel:
> >>>>> Hello,
> >>>>> I've been studying the official tutorial, so far it's been fun, but
> >>>>> today I ran into a problem with the write(). So, I open the file pw
> >>>>> and write "hello" and read:
> >>>>> f = open("pw", "r+")
> >>>>> f.write("hello")
> >>>>> f.read()
> >>>>> But read() returns a bunch of what looks like meta code:
> >>>>> "ont': 1, 'center_insert_even\xc4\x00K\x02\xe8\xe1[\x02z\x8e
> >>>>> \xa5\x02\x0b
> >>>>> \x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0 0'QUEUE'\np1\n
> >>>>> (S'exec' ....
> >>>>> What am I doing wrong? Thank you.
> >>>> After the 'write' the current position in the file is after the "hello", so
> >>>> reading will read further content from there.
> >>>> The following works (disclaimer: I'm utter newbie in Python, and didn't consult
> >>>> the documentation, and it's the first time I've seen the Python 'open'):
> >>>> f = open("pw", "r+")
> >>>> f.write( "hello" )
> >>>> f.seek( 0 )  # Go back to start of file
> >>>> f.read()
> >>>> f.close()
> >>>> Cheers & hth.,
> >>>> - Alf
> >>> Thanks, but it didn't work for me. I still get the meta file. Although
> >>> I see that "hello" is there.
> >> Just a thought: try "w+" instead of "r+".
>
> >> Because if you do
>
> >>    print( open.__doc__ )
>
> >> as I recall it said something about "w" truncating the file?
>
> >> Cheers & hth.,
>
> >> - Alf
>
> > No :) I still got the same thing.
>
> Hm. Now I had to look in the docs because I thought I'd given bad advice.
>
> Doc of 'open' says:
>
>    "The mode 'w+' opens and truncates the file to 0 bytes, while 'r+' opens the
>     file without truncation."
>
> So with 'w+' the only way to get garbage is if 'read' reads beyond the end of
> file, or 'open' doesn't conform to the documentation.
>
> Testing with Python 3.1.1 under Windows XP Pro:
>
> <example>
>  >>> f = open( "zilly", "w+" )
>  >>> f.write( "garbagegarbagegarbagegarbagegarbagegarbagegarbagegarbagegarbage" )
> 63
>  >>> f.close()
>  >>> f = open( "zilly", "r" )
>  >>> f.read()
> 'garbagegarbagegarbagegarbagegarbagegarbagegarbagegarbagegarbage'
>  >>> f.close()
>  >>> f.open( "zilly", "r+" )
> Traceback (most recent call last):
>    File "<stdin>", line 1, in <module>
> AttributeError: '_io.TextIOWrapper' object has no attribute 'open'
>  >>> open( "zilly", "r+" )
> <_io.TextIOWrapper name='zilly' encoding='cp1252'>
>  >>> f = open( "zilly", "r+" )
>  >>> f.write( "hello" )
> 5
>  >>> f.seek( 0 )
> 0
>  >>> f.read()
> 'hellogegarbagegarbagegarbagegarbagegarbagegarbagegarbagegarbage'
>  >>> f.close()
>  >>> f = open( "zilly", "w+" )
>  >>> f.write( "hello" )
> 5
>  >>> f.seek( 0 )
> 0
>  >>> f.read()
> 'hello'
>  >>> f.close()
>  >>>
> </example>
>
> The "w+" works here. Even if I made a typing mistake and apparently left the
> file open in the middle there.
>
> Cheers & hth.,
>
> - Alf




More information about the Python-list mailing list