Извлечь конкретные строки между переменной №. строки из текстового файла в Python

Imdadul Choudhury спросил: 26 ноября 2017 в 04:46 в: python

Этот вопрос, возможно, задавался раньше, но он не соответствует моей ситуации. Я уже прошел через большинство из них, но ни одно из решений не помогает.

Итак, вот проблема. У меня есть текстовый файл, содержащий большое количество строк.
Вот пример файла:

yyyyyy=xxxx  
yyyyyy=xxxxxxxxSun Oct 22 15:19:23 PDT 2017  
calling sequenc node++ entering node aaa (       )  
Sun Oct 22 15:19:23 PDT 2017  
lines xxxxxxxx  
calling wroot.bat  ++ entering node bbb (xxx       )  
Sun Oct 22 15:19:23 PDT 2017  
xxxxxxxxxxxxxx  
calling bsod.bat   
xaaaaa
bbbbb
tttttt
bbb completed successfully  
-- exiting node bbb  ++ entering node ccc (yyyy      )  
Sun Oct 22 15:19:35 PDT 2017  
xxxxxxxxxxxxxxxxx  
calling wpretest.bat

Теперь я хочу извлечь строки из вызывающей части ( включены) в строки, которые находятся над успешно завершенной строкой. Также я хочу извлечь строку только тогда, когда она начинается с ++. Нет. линии после звонка меняется. Может иметь пробел, 2 или более строк после него. Если за ним нет строки, я просто хочу извлечь вызывающую строку. Если в следующей строке успешно завершено, то я также хочу извлечь единственную вызывающую строку. И если между вызывающей линией и успешно завершенной строкой есть другие строки, я хочу извлечь их все.

Вот код, который я пробовал вместе с регулярными выражениями (который, похоже, не работал)

with open('myfile.txt','r') as log: 
    for line in log:        match = re.search(node_name_pattern, line)
        if line.startswith('++') and match:           
            node_name.append(match.group())
            nn=match.group()
        match2 = re.search(node_parameter, line)
        if line.startswith('++') and match2:
            parameter.append(match2.group())
            start_time.append(log.next().strip())
            features.append(log.next().strip())
        if "calling" in line :
                content.append(line.strip())

Вот ожидаемый результат:

calling wroot.bat
calling bsod.bat,
xaaaaa,
bbbbb,
tttttt 
calling wpretest.bat

0 ответов