Как читать куски строк по-разному, как это предусмотрено предыдущим, запуская текст в Python

Хотя я новичок в Python, с ним было здорово программировать. Я на интерпретаторе Python 2.7.5 на OSX. То, что я пытаюсь сделать, – прочитать фрагменты строк из HTML-файла, который я сначала обработал с помощью BeautifulSoup, чтобы получить текстовый контент. Итак, я хочу обработать эти желаемые фрагменты строк по-разному с помощью предыдущего запускающего текста. Однако мой код не выполняет различия между двумя триггерами и обрабатывает все по «Триггерному типу 1». Если я смогу найти решение этой проблемы, я добавлю еще более разные типы триггеров.

Сначала HTML разделил temp_file.txt следующим образом:

lots of unnecessary data on these lines TRIGGER Type 1 lots of unnecessary data on these lines Name: String_to_be_found1 unnecessary data line 54301957(the desired number) lots of unnecessary data on these lines TRIGGER Type 2 lots of unnecessary data on these lines Name2: String_to_be_found2 unnecessary data line unnecessary data line unnecessary data line 54139851(the desired number) lots of unnecessary data on these lines TRIGGER Type 1 lots of unnecessary data on these lines Name: String_to_be_found3 unnecessary data line 425827459(the desired number) 

И мой код:

 f = open("temp_file.txt", "r+") f2 = open("my_output_file.txt", 'w') for line in iter(f.readline, ''): if 'TRIGGER' in line: if 'Type 1' in line: for line in f: if 'Name' in line: desired_string = f.next() f.next() desired_number=f.next() f2.write(desired_string + desired_number + '\n') if 'Type 2' in line: if 'Name2' in line: f.next() desired_string = f.next() f.next() f.next() f.next() desired_number=f.next() f2.write(desired_string + desired_number + '\n') f.close() f2.close() 

Я ударился головой о стену с этой проблемой. Любая помощь приветствуется.

Ваш код немного ошибочен, если Type 1 – это тип, который был сначала найден, тогда он будет обрабатывать все строки после этого как Type 1 поскольку вы снова перебираете f внутри него, и вы не выходите из этого внутреннего цикла до конца файла. Это не сработает.

Вы должны изучить определение какого-либо флага или так, который вы измените, когда найдете в нем строку с TRIGGER в зависимости от типа триггера.

Кроме того, вы можете напрямую перебирать file , он будет перебирать по каждой строке, вам не нужно перебирать итерацию iter(f.readline, '') .

Пример –

 f = open("temp_file.txt", "r+") f2 = open("my_output_file.txt", 'w') flag = None for line in f: if 'TRIGGER' in line: if 'Type 1' in line: flag = 1 elif 'Type 2' in line: flag = 2 elif flag == 1: <do processing for `Type 1`> elif flag == 2: <do processing for `Type 2`> f.close() f2.close() 

Итак, я прочитал полезный ответ Кумара (см. Выше) и мог заставить код работать. В моем случае я должен был внести некоторые незначительные изменения. Я не уверен, что все они нужны на 100%, но этот код работал для меня:

 f = open("temp_file.txt", "r+") f2 = open("my_output_file.txt", 'w') flag = None for line in f: if 'TRIGGER' in line: if 'Type 1' in line: flag = 1 break elif 'Type 2' in line: flag = 2 break elif flag == 1: for line in f: if 'Name:' in line: print 'Test version of the program: Trigger type 1 detected' break elif flag == 2: for line in f: if 'Name2:' in line: print 'Test version of the program: Trigger type 2 detected' break for line in f: if 'TRIGGER' in line: if 'Type 1' in line: flag = 1 break elif 'Type 2' in line: flag = 2 break f.close() f2.close()