Reading text files where last line has no EOL
Steve Holden
steve at holdenweb.com
Mon Sep 17 07:24:40 EDT 2007
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
More information about the Python-list
mailing list