поиск слов после определённой конструкции
Товарищи доброго времени суток, вопрос по поводу поиска и вывода слов после некой словарной конструкции, например в документе есть слово "слово" и мне необходимо вытащить то, что лежит за ним в этой и следующей строке, пока что я сподобился только на такой вариант решения, но он очевидно не подходит.
word = 'слово'
i=0
with open('2.doc') as file:
for line in file:
list_words = line.split()
i=i+1
if word in list_words:
print(line, end='')
break
после правки в соответствии с комментарием получается следующая конструкция
import re
#text = "нанр 123"
name: str = input ("Введите имя входящего файла: ")
f = open (name, "r") # открываем файл
lines = f.readlines() # читаем его построчно
parse_text = re.findall(r'\d+', f)
print(*parse_text, sep='\n')
f.write('реквизит верхний// ' + *parse_text)
f.close()
Ответы (2 шт):
Можно использовать библиотеку регулярных выражений RE. Если предполагается поиск значительного объема "словарных" строк, то один из вариантов использование метода библиотеки findall(), осуществляющий сопоставление по маске.
import re
text = """some text before
word1: any other text
some line for word1
any other line
one more line
word2: any other text
some line for word2"""
parse_text = re.findall('([\w]+):\s?([\S ]+)\n([\S ]+)', text)
print(*parse_text, sep='\n')
Регулярное выражение: ([\w]+):\s?([\S ]+)\n([\S ]+). В круглых скобках в случае с re.findall() указываются блоки, из которых извлекаются данные. Первый компонент ([\w]+) ,берет любые символы из интервала букв, цифр и знака подчеркивания _. Потом :, которое у нас в тексте отделяет первое слово от остальной строки. Далее два блока ([\S ]+), которые ищут все символы \S, которые не относятся к пробелам (пробел, новая строка, табуляция и т.д.) плюс пробел. \n — новая строка.
Результат будет в виде списка кортежей (слово, "то, что после слова" и следующая строка):
('word1', 'any other text', 'some line for word1')
('word2', 'any other text', 'some line for word2')
Пример с чтением из файла
Содержимое файла:
Уважаемый С.С.Б.
Приложение:
копии подписей жителей (__ подписей на __ листах)
Житель района
Обработка:
import re
with open('text.txt', encoding='utf-8') as file:
text = file.read()
parse_text = re.findall('([\w]+)\:\s?([\S ]*)\n([\S ]+)', text)
print(*parse_text, sep='\n')
Результат:
('Приложение', '', 'копии подписей жителей (__ подписей на __ листах)')
В этом есть один момент. Вижу, что Вы пытаетесь считывать doc файл. Его нужно предварительно сконвертировать в txt, либо в docx (но для его чтения нужны дополнительные библиотеки).
Нечто вроде:
def word_read(in_file):
word = ''
while True:
data = in_file.read(1)
if data == '': return ''
if data == ' ' : return word
if data == '\n': return word
word += data
copy_flag = False
start_copy = '<<<'
end_copy = '>>>'
in_file = open('in_text.txt','r')
out_file = open('out_text.txt', 'w')
while True:
word = word_read(in_file)
if word == '': break
if word == start_copy:
copy_flag = True
continue
if word == end_copy:
copy_flag = False
continue
if copy_flag:
out_file.write(word)
out_file.write(' ')
out_file.close()
in_file.close()
