On 17 sep, 13:24, Steve Holden <[EMAIL PROTECTED]> wrote: > 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. >
Oooooooops. It was a stupid bug in my script: textLine[:- int(textLine[-1]=='\n')] is not what I want (the real code was not a one-liner)! The documentation made me think that something wrong was going on with python but I should have known better. Thanks. -- http://mail.python.org/mailman/listinfo/python-list