Поиск значения в текстовом файле с последующей печатью следующей строки

#python #file #python-3.x

#python #файл #python-3.x

Вопрос:

Я импортирую текстовый файл в Python 3, я могу успешно распечатать элемент / строку, которые я использую в качестве идентификатора, однако у меня возникают трудности с печатью следующей строки и сохранением этого значения.

Я использую 'Anchor' для поиска следующих строк. Количество строк между ними 'Anchor' различно, что означает, что иногда между ними возникает мусор / шум 'Anchor' , однако глубина и расстояние от берега всегда равны количеству строк от якоря. Я попытался добавить 1 к строке, так как функция if позволяет мне знать, что это 'Anchor' значение, однако я получаю следующее:

 TypeError: Can't convert 'int' object to str implicitly
  

Файл выглядит так:

 asfasdfasdf
Anchor
The depth is 30 Feet
5 miles from shore

asdfasdsf
Anchor
The depth is 24 feet
8 miles from shore
Anchor
The depth is 21 feet
4 km from shore
  

Попытка со следующим кодом:

 f = open('test.txt', 'r', encoding='utf8')

for line in f.readlines():
    if 'Anchor' in line:
        print(line 1)

f.close()
  

Ответ №1:

Вы могли бы ввести переменную, представляющую состояние последней строки, например:

 previous_line_was_anchor = False
for line in f.readlines():
    if 'Anchor' in line:
        previous_line_was_anchor = True
    else: 
        if previous_line_was_anchor:
             print line
        previous_line_was_anchor = False
  

Комментарии:

1. Спасибо за это решение, есть мысли о том, как печатать дополнительные позиции после «привязки»?

2. Это не было частью вашего первоначального вопроса. Вы должны принять ответ как есть.

Ответ №2:

Я бы настоятельно рекомендовал использовать итераторы python.

Похоже, ваша проблема больше подходит для пользовательской итерации, а не для использования for .. in .. цикла:

 lines = iter(f.readlines())

while True:
    try:
        if next(lines) == 'Anchor':
            print(next(lines))
    except StopIteration:
        break
  

Если вам нужно напечатать дополнительные строки после «привязки», просто добавьте больше print(next(lines)) вызовов.