Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > Reading text files where last line has no EOL

Reply
Thread Tools

Reading text files where last line has no EOL

 
 
BlueBird
Guest
Posts: n/a
 
      09-17-2007
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 ?

 
Reply With Quote
 
 
 
 
Steve Holden
Guest
Posts: n/a
 
      09-17-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
 
Reply With Quote
 
 
 
 
Steve Holden
Guest
Posts: n/a
 
      09-17-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

 
Reply With Quote
 
BlueBird
Guest
Posts: n/a
 
      09-17-2007
On 17 sep, 13:24, Steve Holden <(E-Mail Removed)> 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.





 
Reply With Quote
 
Gabriel Genellina
Guest
Posts: n/a
 
      09-17-2007
En Mon, 17 Sep 2007 09:02:38 -0300, BlueBird <(E-Mail Removed)>
escribi�:

> 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.


If that expression is supposed to remove the trailing newline, I suggest
using
textLine = textLine.rstrip('\n')

--
Gabriel Genellina

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Reading LAST line from text file without iterating through the file? Robin Wenger Java 191 03-26-2011 06:19 PM
Reading line by line in a large text file xyz C++ 3 06-09-2008 12:55 PM
reading a line by line from local text file through WATIR curious Ruby 1 10-25-2006 01:34 PM
merging files with CR as EOL ? Une Bévue Ruby 3 10-18-2006 01:35 PM
Retaining Unix EOL when reading/writing in windows Nick Wain Python 1 01-18-2006 03:19 PM



Advertisments