Я думаю, что более простое определение будет
import re
def separate_files ():
pat = re.compile(r"[@introS\].[\@introEnd@]")
with open('sample.txt') as file:
for i in filter(pat.match, file):
print(i)
inp = input("write text to a file? Y|N: ")
if inp != "Y":
continue
file_name = input("Name of your file: ")
with open(file_name, "w") as out_file:
out_file.write(i)
print("text {} written to a file".format(i))
Продолжайте цикл как можно скорее в каждом случае, чтобы следующий код не нужно было вкладывать все глубже и глубже.Кроме того, нет необходимости читать весь файл сразу в память;просто сопоставьте каждую строку с шаблоном по мере его появления.
Вы также можете подумать о том, чтобы просто запросить имя файла, трактуя пустое имя файла как отказ от записи строки в файл.
for i in filter(pat.match, file):
print(i)
file_name = input("Enter a file name to write to (or leave blank to continue: ")
if not file_name:
continue
with open(file_name, "w") as out_file:
out_file.write(i)
print("text {} written to {}".format(i, file_name)