Питон - подсчет количества глав, в котором встречается искомое слово
Изначально задача следующая - дан текстовый файл txt, разбитый по словам, главы в нем разделяются строкой '[new chapter]'). Необходимо написать программу, которая посчитает количество глав, в котором встречается искомое слово. Моя идея состояла в том, чтобы составить список из индексов, которым соответствует строка '[new chapter]' и далее написать цикл, считающий количество глав, в которых участвует искомое слово с помощью переменной counter. С первой частью задачи справилась, дальше начались проблемы. Не понимаю как перебрать все индексы, в которых используется искомое слово (потому что в текущем коде берется тот индекс, когда слово встречается только первый раз. Сомневаюсь, что правильно написала в целом второй цикл, результат выдается, но некорректный:
def read_data():
data = open('/Users/taisiamoiseenko/Desktop/MISIS/Python/war_peace_processed.txt', 'rt').read()
return data.split('\n')
data = read_data()
target_word='князь'
indexes=[]
counter=0
for index,value in enumerate(data):
if value=='[new chapter]':
indexes.append(index)
for i in indexes:
j=0
if j<data.index(target_word)<i:
j+=i
i+=1
counter+=1
print(counter)
Буду благодарна помощи и советам.
Ответы (1 шт):
Я бы не стал зачитывать весь файл в память (лишняя трата памяти). А просто бы читал его построчно и сразу бы анализировал.
Как только встретился маркер новой главы - ставил бы флаг, что можно искать слово.
Для остальных строк если стоит этот флаг, то искал бы слово. Если нашёл, то увеличивал бы счётчик и сбрасывал флаг (чтобы не искать в этой главе дальше и по-быстрому промотать строки до следующего маркера главы).
target_word = 'князь'
with open('file.txt', 'rt') as fp:
counter = 0
search = True # если надо ждать начала первой главы, то можно поставить False
for line in fp:
line = line.rstrip('\n')
if line == '[new chapter]':
search = True
elif search and target_word in line: # можно применить более точный поиск по словам если требуется
counter += 1
search = False
print(counter)