остановить цикл по окончании текста - PullRequest
0 голосов
/ 22 марта 2019

У меня есть программа, которая перебирает строки книги, чтобы соответствовать некоторым тегам, которые я создала, указывая начало и конец каждой главы этой книги. Я хочу разделить каждую главу в отдельный файл. Программа находит каждую главу и просит пользователя назвать файл, затем она продолжается до следующей главы и так далее. Я не знаю точно, где поставить мой «разрыв» или что-то, что может остановить мою петлю. Программа работает хорошо, но когда она достигает последней главы, она возвращается к первой главе. Я хочу остановить цикл и завершить программу, когда теги и главы заканчиваются, а также напечатать что-то вроде «Конец глав». Кто-нибудь может мне помочь с этим? Код ниже:

import re
def separate_files ():
    with open('sample.txt') as file:
        chapters = file.readlines()



pat=re.compile(r"[@introS\].[\@introEnd@]")
reg= list(filter(pat.match, chapters))
txt=' '

while True:
    for i in chapters:
        if i in reg:
            print(i)
            inp=input("write text a file? Y|N: ")
            if inp =='Y':
                txt=i
                file_name=input('Name your file: ')
                out_file=open(file_name,'w')
                out_file.write(txt)
                out_file.close()
                print('text', inp, 'written to a file')
            elif inp =='N':
                break
        else:
            continue
    else:
        continue


separate_files()

Ответы [ 2 ]

2 голосов
/ 22 марта 2019

Я думаю, что более простое определение будет

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)
0 голосов
/ 22 марта 2019

Я не могу запустить ваш код, но я предполагаю, что если вы удалите

while True:

строка, она должна работать нормально. Это всегда будет выполняться, так как ничего не проверено

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...