stdio EOF ?

Duncan Booth duncan at
Tue Aug 13 13:46:53 CEST 2002

Paul Rubin <phr-n2002b at> wrote in
news:7xbs87dmfs.fsf at 

> Duncan Booth <duncan at> writes:
>> If you don't like having to strip all the newlines from each line,
>> then an alternative is to write a generator to do it for you:
>> from __future__ import generators
>> import sys
>> def filelines(f):
>>     while 1:
>>         line = f.readline()
>>         if not line: break
>>         yield line[:-1]
>> for line in filelines(sys.stdin):
>>     print "**",`line`,"**"
> Oops!  This chops the last character if the last line of the file
> doesn't end with newline.
Any non-trivial code has bugs[1] (I managed a 4 byte program[2] once, with 
a bug). If there is a chance that there is no newline at the end of the 
file then use:
    yield line.endswith('\n') and line[:-1] or line

or if you don't care about trailing spaces then a cleaner option may be:
    yield line.rstrip()

[1] At least any I write does.
[2] That was the second shortest (useful) program I ever wrote.

Duncan Booth                                             duncan at
int month(char *p){return(124864/((p[0]+p[1]-p[2]&0x1f)+1)%12)["\5\x8\3"
"\6\7\xb\1\x9\xa\2\0\4"];} // Who said my code was obscure?

More information about the Python-list mailing list