BlueBird wrote: > I tried and failed to read text files where the last line does not > contain proper EOL. For my tests, I use a file that I create with the > equivalent of : > > open('toto', 'w').write( '1234\n4567\n89AB' ) > > > My reading code looks like this : > > l = f.readline() > while len(l): > self.appendLine( l ) > l = f.readline() > > The last line is not returned (89AB) is never returned. > > I tried with "for l in f" with similar results. > > I read the doc : > > In order to make a for loop the most efficient way of looping over the > lines of a file (a very common operation), the next() method uses a > hidden read-ahead buffer. As a consequence of using a read-ahead > buffer, combining next() with other file methods (like readline()) > does not work right. However, using seek() to reposition the file to > an absolute position will flush the read-ahead buffer. New in version > 2.3. > > I've tried to do a f.seek( f.tell() ) but that did not help. > > So how am I supposed to fetch that last line ? > What version of Python are you using, and on what platform? WJFFM on 2.5.1/Cygwin:
>>> open('toto', 'w').write( '1234\n4567\n89AB' ) >>> for l in open('toto'): ... print l ... 1234 4567 89AB >>> You will observe that the last line is presented, but correctly does not include a trailing line feed. regards Steve -- Steve Holden +1 571 484 6266 +1 800 494 3119 Holden Web LLC/Ltd http://www.holdenweb.com Skype: holdenweb http://del.icio.us/steve.holden Sorry, the dog ate my .sigline -- http://mail.python.org/mailman/listinfo/python-list