an enumerate question

eight02645999 at yahoo.com eight02645999 at yahoo.com
Tue Mar 20 00:49:13 EDT 2007


On Mar 20, 11:00 am, Steven Bethard <steven.beth... at gmail.com> wrote:
> eight02645... at yahoo.com wrote:
> > for n,l in enumerate(open("file")):
> >    print n,l # this prints current line
> >    print next line in this current iteration of the loop.
>
> Depends what you want to happen when you request "next".  If you want to
> renumber the lines, you can call .next() on the iterator::
>
>      >>> open('temp.txt', 'w').write('1\n2\n3\n4\n5\n6\n7\n')
>      >>> lines_iter = open('temp.txt')
>      >>> for i, line in enumerate(lines_iter):
>      ...     print 'LINE %i, %r %r' % (i, line, lines_iter.next())
>      ...
>      LINE 0, '1\n' '2\n'
>      LINE 1, '3\n' '4\n'
>      LINE 2, '5\n' '6\n'
>      Traceback (most recent call last):
>        File "<interactive input>", line 2, in <module>
>      StopIteration
>
> If you want to peek ahead without removing the line from the iterator,
> check out this recipe::
>
>      http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/304373
>
> Which allows code like::
>
>      >>> lines_iter = peekable(open('temp.txt'))
>      >>> for i, line in enumerate(lines_iter):
>      ...     print 'LINE %i, %r %r' % (i, line, lines_iter.peek())
>      ...
>      LINE 0, '1\n' '2\n'
>      LINE 1, '2\n' '3\n'
>      LINE 2, '3\n' '4\n'
>      LINE 3, '4\n' '5\n'
>      LINE 4, '5\n' '6\n'
>      LINE 5, '6\n' '7\n'
>      Traceback (most recent call last):
>        ...
>      StopIteration
>
> (Note that the recipe doesn't try to catch the StopIteration, but if you
> want that suppressed, it should be a pretty simple change.)
>
> STeVe

thanks,  lines_iter.next() is what i need at the moment.




More information about the Python-list mailing list