readlines() a file in 2 parts.

Aldo Cortesi aldo at
Fri Feb 8 19:50:40 EST 2002

Thus spake Jason Price (jprice at

> I have several files to read that logically break into 2
> parts.  It would be much cleaner to write 2 different 'for
> line in file.readline() :' loops, but the break point is
> different in each file, so I don't know the starting line.
> What I tried to do origionally was:
> for line in file.readlines() :
>    if condition :
>       break
>    else:
>       do thing 1
> for line in file.readlines()
>    do thing 2

> I tried both readlines and xreadlines, and neither seem to
> do what I'd like.  Is there a way to do this cleanly, or
> should I punt, and just make the loop more complex?


Every time you run file.readlines() a brand new list of
lines is created from the file. What you really want to do
is to create an iterator - an object you can loop over, and
which will keep your "place" in the file. This is excactly
what xreadlines() does.

The general syntax you give above is correct, with a small

itr = open("file").xreadlines()

for line in itr:
    if condition:
        print line

for line in itr:
    print line  

If you are using Python 2.2, it is probably in better taste
to replace the first line with:

itr = iter(open("file"))

For more info on iterators in Python 2.2, see this article
by David Mertz:,l=252,p=iterators



Aldo Cortesi
aldo at

More information about the Python-list mailing list