End of file
Nick Craig-Wood
nick at craig-wood.com
Thu Oct 7 11:29:57 EDT 2004
Duncan Booth <duncan.booth at invalid.invalid> wrote:
> You need to read the next line before you can tell which is the last line.
> The easiest way is probably to use a generator:
>
> def lineswithlast(filename):
> prev, line = None, None
> for line in file(filename):
> if prev is not None:
> yield prev, False
> prev = line
> if line:
> yield line, True
>
>
> for line, last in lineswithlast('somefile.txt'):
> print last, line
I like that. I generalised it into a general purpose iterator thing.
You'll note I use the spurious sentinel local variable to mark unused
values rather than None (which is likely to appear in a general
list). I think this technique (which I invented a few minutes ago!)
is guaranteed correct (ie sentinel can never occur in iterator).
def iterlast(iterator):
"Returns the original sequence with a flag to say whether the item is the last one or not"
sentinel = []
prev, next = sentinel, sentinel
for next in iterator:
if prev is not sentinel:
yield prev, False
prev = next
if next is not sentinel:
yield next, True
for line, last in iterlast(file('z')):
print last, line
--
Nick Craig-Wood <nick at craig-wood.com> -- http://www.craig-wood.com/nick
More information about the Python-list
mailing list