искать строку в текстовом файле после определенной строки в python - PullRequest
0 голосов
/ 06 августа 2020

Предположим, это текстовый файл, содержащий 10 строк.

1 mpe:p01 
2 mpe:p02 
3 * xyz 3 
4 mpe:p04 
5 mpe:p05 
6 mpe:p06 
7 mpe:p07 
8 mpe:p08 
9 mpe:p09 
10 mpe:p100 

Мне нужно найти строку «mpe:» после строки «xyz».

Мой фрагмент кода :

str1_name ="* xyz"  
str2_name = "mpe:" ` 

lines = [] 

with open("textfile.txt",'r') as f:
   for line in f:
       if str2_name in line:
           lines.append(line)  
        lines2=lines[0]  
    print(lines2)

он дает мне вывод:

1 mpe: p0

, но мне нужен вывод:

4 MPE: p0

Ответы [ 3 ]

1 голос
/ 06 августа 2020

Вам нужно сначала проверить, не встретили ли вы строку xyz. Если да, то установите флаг в значение true. Затем продолжайте чтение файла. Если бы предыдущая строка была прочитана xyz, флаг был бы установлен на True. Проверьте, есть ли в текущей строке mpe, и добавьте эту строку к lines. Посмотрите, работает ли этот код.

str1_name ="* xyz"  
str2_name = "mpe:" 
prev_xyz = False

lines = [] 

with open("textfile.txt",'r') as f:
    for line in f:
       if str2_name in line and prev_xyz:
           lines.append(line.strip())  
           #lines2=lines[0] prev line will strip out \n
       if str1_name in line:
           prev_xyz = True
       else:
           prev_xyz = False
print(lines2)

Вывод:

['4 mpe:p04']
0 голосов
/ 06 августа 2020

Хорошо, если вы уверены, что mpe следует за xyz , вы можете запустить что-то вроде:

str1_name ="* xyz"  

with open("textfile.txt",'r') as f:
    for line in f:
        while str1_name not in line:
            pass
        if str2_name in line:
            print(next(f))

Если искомая строка не следует сразу :

str1_name ="* xyz"
str2_name = "mpe:"  

checkpoint = False

with open("textfile.txt",'r') as f:
    for line in f:
        if str1_name in line:
            checkpoint = True
        if checkpoint and str2_name in line:
            print(line)
            break
0 голосов
/ 06 августа 2020
lines = []
line_after_str1=[]

str1_name ="* xyz"

str2_name = "mpe:" 

with open("textfile.txt",'r') as f:
    all_lines=f.readlines()
    for line in range(len(all_lines)):
        
        if str1_name in all_lines[line]:
            line_after_str1.append(all_lines[line+1].replace('\n',''))
        elif str2_name in all_lines[line]:
            lines.append(all_lines[line].replace('\n',''))
        

print(line_after_str1)

Вывод:

['4 mpe:p04']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...