On Oct 31, 10:40 am, "Alf P. Steinbach" <al...@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...@start.no> wrote: > >> * Zeynel: > > >>> On Oct 31, 9:23 am, "Alf P. Steinbach" <al...@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 -- http://mail.python.org/mailman/listinfo/python-list