Simple looping question...

Ken Seehof kens at sightreader.com
Mon Apr 2 20:53:07 EDT 2001


"David Allen" <mda at idatar.com> says:


> In article <mailman.986227337.10718.python-list at python.org>, "Vincent A.
> Primavera" <vincent_a_primavera at netzero.net> wrote:
>
> > Hello,
> > In a piece of code similar to this I am trying to read all the lines
from a
> > file but no more.  How can I set the "range" of this loop to stop when
it
> > reaches the end of the file?
> >
> >               for i in range(???):
> >               a = fil1.readline()
> >               print a
>
> You're going at it from the wrong way around.  If
> you really want to do it based on the number of lines
> in the file, do this:
>
> lines = fil1.readlines()
>
> for i in range(0, len(lines)):
>   print lines[i]
>
> but better would probably be to do this:
>
> for line in fil1.readlines():
>   print line
>
> IIRC, that way you don't have to have the whole damn
> file in memory.  Python is smart enough to assign
> lines one at a time into 'line' rather than to
> create an actual array.
>
> David Allen
> http://opop.nols.com/
> ----------------------------------------
> Great minds run in great circles.

I don't believe you.

>>> f = open(r'd:\qp\var\publish\index.html')
>>> z = f.readlines()
>>> type(z)
<type 'list'>

It would appear that readlines() returns a list.  Therefore
the entire file is read in to create that list before returning.
On the other hand, I have written a generator class that
does what you are saying.  In order for readlines() to be
smart, it would have to return a generator instead of a list.

- Ken Seehof
kseehof at neuralintegrator.com
www.neuralintegrator.com







More information about the Python-list mailing list