На самом деле, я подозреваю, что вы действительно хотите разорвать после ссылки, начинающейся с Demographics:
, или до строки, заканчивающейся (1 item)
или (2 items)
или аналогичной.
Но как бы вы ни хотели сломатьесть два шага:
- Придумайте правило, которое вы можете превратить в функцию, которую вы вызываете в каждой строке.
- Напишите некоторый код, который группирует вещи на основена результат этой функции.
Давайте использовать ваше правило.Функция для этого может быть:
def is_last_line(line):
return line.strip().endswith('(female 16+)')
Теперь, вот способ, которым вы могли бы сгруппировать вещи, используя эту функцию:
i = 1
outfile = open(f'outfile{i}.txt', 'w')
for line in infile:
outfile.write(line.strip())
if is_last_line(line):
i += 1
outfile = open(f'outfile{i}.txt', 'w')
outfile.close()
Есть способы, которыми вы можете сделать это намного более кратким с помощьюиспользуя, например, itertools.groupby
, itertools.takewhile
, iter
или другие функции.Или вы можете написать функцию генератора, которая все еще делает вещи вручную, но с yield
группами строк, которые позволили бы создавать новые файлы намного проще (и давайте использовать блоки with
).Но такая явная формулировка, вероятно, облегчает понимание новичку (и отладку, а затем расширяет его) за счет некоторой детализации.
Например, это не очень понятно изкак вы сформулировали свой вопрос, хотите ли вы, чтобы эта строка Demographics:
появилась в ваших выходных файлах.Если вы этого не сделаете, должно быть очевидно, как все изменить:
if not is_last_line(line):
outfile.write(line.strip())
else:
i += 1
outfile = open(f'outfile{i}.txt', 'w')