[Patches] [ python-Patches-516297 ] iterator for lineinput

noreply@sourceforge.net noreply@sourceforge.net
Mon, 25 Mar 2002 13:43:01 -0800


Patches item #516297, was opened at 2002-02-12 03:56
You can respond by visiting: 
http://sourceforge.net/tracker/?func=detail&atid=305470&aid=516297&group_id=5470

Category: Library (Lib)
Group: Python 2.3
Status: Open
Resolution: None
Priority: 5
Submitted By: Brett Cannon (bcannon)
Assigned to: Neil Schemenauer (nascheme)
Summary: iterator for lineinput

Initial Comment:
Taking the route of least evasiveness, I have come up with
a VERY simple iterator interface for fileinput.

Basically, __iter__() returns self and next() calls
__getitem__() with the proper number.  This was done to
have the patch only add methods and not change any
existing ones, thus minimizing any chance of breaking
existing code.

Now the module on the whole, however, could possibly
stand an update now that generators are coming.  I have
a recipe up at the Cookbook that uses generators to
implement fileinput w/o in-place editing
(http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/112506).
 If there is enough interest, I would be quite willing
to rewrite fileinput using generators.  And if some of
the unneeded methods could be deprecated (__getitem__,
readline), then the whole module could probably be
cleaned up a decent amount and have a possible speed
improvement.

----------------------------------------------------------------------

>Comment By: Neil Schemenauer (nascheme)
Date: 2002-03-25 21:43

Message:
Logged In: YES 
user_id=35752

I'm still not getting it.  It only way to get an 'iterator'
object wrapping the FileInput instance is to call iter() on
it.  Why would you want to do that?  Just use readline() and
nextfile().



----------------------------------------------------------------------

Comment By: Brett Cannon (bcannon)
Date: 2002-03-25 21:33

Message:
Logged In: YES 
user_id=357491

Adding an iterator interface that returns itself means that
you only need to keep track of a single object.  Using the
iter() fxn on the original fileinput returns a canned
iterator that has none of the methods that a FileInput
instance has.

This means that if you want to stop iterating over the
current file and move on to the next one in the FileInput
instance, you have to call .nextfile() on the original
object; you can't call it on the iterator.

Having the __iter__() method return the instance itself
means that you can call .nextfile() on the iterator (or the
original since they are the same).  It also also updates the
module (albeit in a hackish way) to be a little bit more modern.

Also note that I uploaded a new diff and deleted the old
one; I accidently left out the return command in the
original diff.

----------------------------------------------------------------------

Comment By: Neil Schemenauer (nascheme)
Date: 2002-03-25 04:35

Message:
Logged In: YES 
user_id=35752

Why do you need fileinput to have a __iter__ method?  As
far as I can see it only slows things down.  As it is now
iter(fileinput.input()) works just fine.  Adding __iter__
and next() just add another layer of method calls.



----------------------------------------------------------------------

You can respond by visiting: 
http://sourceforge.net/tracker/?func=detail&atid=305470&aid=516297&group_id=5470