iterating over a file with two pointers

Peter Otten __peter__ at web.de
Wed Sep 18 07:44:10 EDT 2013


nikhil Pandey wrote:

> hi,
> I want to iterate over the lines of a file and when i find certain lines,
> i need another loop starting from the next of that "CERTAIN" line till a
> few (say 20) lines later. so, basically i need two pointers to lines (one
> for outer loop(for each line in file)) and one for inner loop. How can i
> do that in python? please help. I am stuck up on this.

Here's an example that prints the three lines following a line containing a 
'*':

Example data:

$ cat tmp.txt
alpha
*beta
*gamma
delta
epsilon
zeta
*eta

The python script:

$ cat tmp.py
from itertools import islice, tee

with open("tmp.txt") as f:
    while True:
        for outer in f:
            print outer,
            if "*" in outer:
                f, g = tee(f)
                for inner in islice(g, 3):
                    print "   ", inner,
                break
        else:
            break

The script's output:

$ python tmp.py
alpha
*beta
    *gamma
    delta
    epsilon
*gamma
    delta
    epsilon
    zeta
delta
epsilon
zeta
*eta
$ 

As you can see the general logic is relatively complex; it is likely that we 
can come up with a simpler solution if you describe your actual requirement 
in more detail.




More information about the Python-list mailing list