2015-04-08 2 views
0

У меня есть огромный текстовый файл. Я пытаюсь напечатать строку после каждого раза, когда я нахожу конкретное слово.напечатать строку после соответствующего слова

Пример:

lines = 
""" 
match_string 
line2_0 
somelines 
... 
... 
.... 
match_string 
line_0 
... 
... 
... 
match_string 
line3_0 
. 
. 
. 
. 
.""" 

Мой сценарий должен найти "match_string" и напечатать первую линию приходит после него.

line2_0

line_0

line3_0

ответ

4

Вы можете создать итератор из строк в строки и использовать next для печати на следующую строку, когда вы найдете матч на текущей строке. После этого цикл for автоматически продолжит линию.

iterator = iter(lines.splitlines()) 
for line in iterator: 
    if "match_string" in line: 
     print next(iterator) 

Или читать строки из файла:

with open("huge_text_file.txt") as file_iterator: 
    for line in file_iterator: 
     if "match_string" in line: 
      print next(file_iterator) 

Выход:

line2_0 
line_0 
line3_0 

Обратите внимание, что это может поднять StopIteration исключение в случае, если нет next линии после строка, содержащая match_string. В этом случае просто заверните код в блок try/except.

+1

Будьте осторожны, если возможно иметь «match_string» в качестве последней строки в файле (по какой-то странной причине) этот код вызовет ошибку. Но это может быть легко обработано блоком 'try except' или просто убедитесь, что' match_string' не может находиться в последней строке файла. – Marek

+0

Большое спасибо за этот четкий ответ. Оно работает! – Omar

+0

Как читать строки между каждыми двумя итерациями? например: если «line2_0» - это то, что я хочу, я буду искать другую строку между двумя «match_string», с которой «line2_0» находится между ними. – Omar

Смежные вопросы