Login | Register For Free | Help
Search for: (Advanced)

Mailing List Archive: Python: Python

Reading text files where last line has no EOL

 

 

Python python RSS feed   Index | Next | Previous | View Threaded


phil at freehackers

Sep 17, 2007, 4:03 AM

Post #1 of 5 (230 views)
Permalink
Reading text files where last line has no EOL

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 ?

--
http://mail.python.org/mailman/listinfo/python-list


steve at holdenweb

Sep 17, 2007, 4:24 AM

Post #2 of 5 (194 views)
Permalink
Re: Reading text files where last line has no EOL [In reply to]

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


steve at holdenweb

Sep 17, 2007, 4:24 AM

Post #3 of 5 (195 views)
Permalink
Re: Reading text files where last line has no EOL [In reply to]

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


phil at freehackers

Sep 17, 2007, 5:02 AM

Post #4 of 5 (188 views)
Permalink
Re: Reading text files where last line has no EOL [In reply to]

On 17 sep, 13:24, Steve Holden <st...@holdenweb.com> 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


gagsl-py2 at yahoo

Sep 17, 2007, 12:20 PM

Post #5 of 5 (195 views)
Permalink
Re: Reading text files where last line has no EOL [In reply to]

En Mon, 17 Sep 2007 09:02:38 -0300, BlueBird <phil [at] freehackers>
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

--
http://mail.python.org/mailman/listinfo/python-list

Python python RSS feed   Index | Next | Previous | View Threaded
 
 


Interested in having your list archived? Contact Gossamer Threads
 
  Web Applications & Managed Hosting Powered by Gossamer Threads Inc.