mmxool
mmxool

Reputation: 21

extracting lines in a text file between two lines of strings

I have the following example text file (it is in the format as indicated below). I want to extract everything between the lines "Generating configuration...." and "`show accounting log all`", this is the beginning and end of what I am interested in.

some lines
some more line
Generating configuration....
interested config
interested config
interested config
`show accounting log all`
some lines
some more line

I wrote the following code, but its does not stop appending the lines to the textfile after it has found `show accounting log all`.

    config_found = False
    with open(filename, 'rb') as f:
        textfile_temp = f.readlines()

    for line in textfile_temp:
        if re.match("Generating configuration....", line):
            config_found = True
        if re.match("`show accounting log all`", line):
            config_found = False
        if config_found:
            i = line.rstrip()
            textfile.append(i)

what am i doing wrong with my statements?

Upvotes: 1

Views: 4765

Answers (2)

venpa
venpa

Reputation: 4318

Instead of single quotes, you have to use back quote in your comparision and you can have if and elif for extracting in between strings. I have modified as below and it's working:

with open('file.txt', 'rb') as f:
    textfile_temp = f.readlines()
    config_found = False
    textfile = []
    for line in textfile_temp:
        if re.match("`show accounting log all`", line):
            config_found = False
        elif config_found:
            i = line.rstrip()
            textfile.append(i)
        elif re.match("Generating configuration....", line):
            config_found = True
    print textfile

Output:

  ['interested config', 'interested config', 'interested config']

Instead you can use split as below:

 with open('file.txt', 'rb') as f:
     textfile_temp = f.read()
     print textfile_temp.split('Generating configuration....')[1].split("`show accounting log all`")[0]

Output:

interested config 
interested config 
interested config 

Upvotes: 3

user764357
user764357

Reputation:

config_found appears to have no scope outside of the loop.

Put config_found = False before the loop and it should work fine.

Upvotes: 0

Related Questions