Одним из способов избежать дублирования кода будет использование заголовков в главном файле в качестве «селекторов» для какого файла записывать. Что-то вроде:
with open("romeo-full.txt") as handle, \
open("romeo.txt", 'w') as r_f, \
open("juliet.txt", 'w') as j_f:
file_chooser = {"ROMEO": r_f,
"JULIET": j_f}
for line in handle:
try:
cur_file = file_chooser[line.strip()]
except KeyError:
cur_file.write(line)
Цель блока try/except
состоит в том, чтобы изменять cur_file
только тогда, когда мы сталкиваемся с одним из заголовков (а затем пропускаем его).
Один из способов избежать этого - использовать метод dict get
с cur_file
по умолчанию (поэтому он изменяется только в заголовках):
with open("romeo-full.txt") as handle, \
open("romeo.txt", 'w') as r_f, \
open("juliet.txt", 'w') as j_f:
file_chooser = {"ROMEO": r_f,
"JULIET": j_f}
cur_file = r_f
for line in handle:
cur_file = file_chooser.get(line.strip(), cur_file)
cur_file.write(line)
Недостатком здесь является то, что заголовки также будут записываться каждый раз в файлы.