Search code examples
pythonfor-loopiterationpython-2.4logfile-analysis

Loop within loop python


I have a log file with several hundred thousand lines.

I am looping through these lines to find any line with some specific text, for example: !!event!!.
Then, once an !!event!! line is found, I need to continue looping after this !!event!! line until I find the next 3 lines which contain their own specific text ('flag1', 'flag2', and 'flag3').
Once I find the third line ('flag3'), I then want to continue looping for the next !!event!! line and repeat the former process until there are no more events.

Does anyone have suggestions on ways I structure my code to accomplish this?

For example:

f = open('samplefile.log','r')
for line in f:
    if '!!event!!' in line:
            L0 = line
        #then get the lines after L0 containing: 'flag1', 'flag2', and 'flag3'
        # below is a sample log file  
        #I am not sure how to accomplish this 
        #(I am thinking a loop within the current loop) 
        #I know the following is incorrect, but the 
         intended result would be able to yield something like this:
            if "flag1" in line:
                L1 = line.split()
            if "flag2" in line:
                L2 = line.split()
            if "flag3" in line:
                L3 = line.split()
print 'Event and flag times: ', L0[0], L1[0], L2[0], L3[0]

samplefile.log

8:41:05 asdfa   32423
8:41:06 dasd    23423
8:41:07 dfsd    342342
8:41:08 !!event!!   23423
8:41:09 asdfs   2342
8:41:10 asdfas  flag1
8:41:11 asda    42342
8:41:12 sdfs    flag2
8:41:13 sdafsd  2342
8:41:14 asda    3443
8:41:15 sdfs    2323
8:41:16 sdafsd  flag3
8:41:17 asda    2342
8:41:18 sdfs    3443
8:41:19 sdafsd  2342
8:41:20 asda    3443
8:41:21 sdfs    4544
8:41:22 !!event!!   5645
8:41:23 sdfs    flag1
8:41:24 sadfs   flag2
8:41:25 dsadf   32423
8:41:26 sdfa    23423
8:41:27 sdfsa   flag3
8:41:28 sadfa   23423
8:41:29 sdfas   2342
8:41:30 dfsdf   2342

the code from this sample should print:

Event and flag times: 8:41:08 8:41:10 8:41:12 8:41:16
Event and flag times: 8:41:22 8:41:23 8:41:24 8:41:27

Solution

  • Sure, you can continue to consume the file in an inner loop, then break out of it when you encounter flag3, and the outer loop will resume:

    for line in f:
        if '!!event!!' in line:
            L0 = line.split()
            for line in f:
                if "flag1" in line:
                    L1 = line.split()
                elif "flag2" in line:
                    L2 = line.split()
                elif "flag3" in line:
                    L3 = line.split()
                    break             # continue outer loop
            print 'Event and flag times: ', L0[0], L1[0], L2[0], L3[0]
    
    # Event and flag times:  8:41:08 8:41:10 8:41:12 8:41:16
    # Event and flag times:  8:41:22 8:41:23 8:41:24 8:41:27