Как создать папку для хранения файлов, сгенерированных в цикле?

#python #loops #directory

#python #циклы #каталог

Вопрос:

Мне нужно сделать следующее в моей программе:

a) Попросите пользователя ввести имя папки, которая будет создана в моем каталоге b) создайте папку c) сгенерируйте файлы внутри папки

Файлы, которые будут сгенерированы, представляют собой различные тексты, извлеченные из книги с использованием РЕГУЛЯРНЫХ выражений. Я хочу, чтобы программа выполняла цикл по всем совпадениям РЕГУЛЯРНЫХ выражений и автоматически помещала каждое совпадение в файл (каждому тексту соответствует файл). Эти текстовые файлы необходимо сохранить во вновь созданной папке, названной пользователем.

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

Chapter1.txt Обратная трассировка (последний вызов last): File «/Users/nataliaresende/Dropbox/PYTHON/word_concatenator_final.py «, строка 375, в файле menu() «/Users/nataliaresende/Dropbox/PYTHON/word_concatenator_final.py «, строка 365, в файле меню separate_chapters() «/Users/nataliaresende/Dropbox/PYTHON/word_concatenator_final.py «, строка 224, в файле separate_chapters os.makedirs(папка) «/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/os.py «, строка 221, в makedirs mkdir(имя, режим) FileExistsError: [Ошибка 17] Файл существует: ‘/Users/nataliresende/Dropbox/PYTHON/папка’

У кого-нибудь есть представление о том, что происходит? Может быть, идентификация?

 us=input('nnEnter the name of the book or file: ')

    pat = re.compile(r'(?<=[@CHAPST@]). ?(?=[@CHAPFN@])')
    my_chapters=[]


    with open(us, 'r', encoding="utf-8") as file:
        for i in pat.findall(file.read()):
            my_chapters.append(i)

    print('nnThis book contains',len(my_chapters), 'chapters')

    user2=input('nnWrite chapters to a file? | Y/N: ')


    if user2 =='Y':
    folder_name=input("Name your folder. E.g. 'Texts': ")
    folder=os.path.join('/Users/nataliaresende/Dropbox/PYTHON/', folder_name)
    os.makedirs(folder)

    for j in range(len(my_chapters)):
        chap='Chapter' str(j 1)  '.txt'.format(folder_name)
        file = os.path.join(folder, chap)

        with open(file, "w") as f:
            for item in my_chapters[j]:
                f.write("%s" % str(item))
        print('nn', chap)

print('nnChapters 1 -',len(my_chapters), 'written to a file separately. Check your folder named "Chapters" in your directory')
  

Комментарии:

1. os.makedirs(folder) Вы пытаетесь создать одну и ту же папку более одного раза. Выньте это из цикла и используйте exist_ok параметр.

2. @JohnnyMopp, ок! Я переместил os.makedirs (папку), а также обновил код. Можете ли вы показать мне параметр exist_ok? Может быть, обновить мой код?

3. os.makedirs(folder, exist_ok=True) Также обратите внимание, что если user2 != 'Y' , то переменные folder и folder_name будут неопределенными.

4. что мне добавить еще: продолжить цикл?

Ответ №1:

Вам нужно проверить, существует ли эта папка, и если существует, пропустите ее создание:

 if not os.path.exists(folder):
    os.makedirs(folder)
  

Комментарии:

1. Замените os.makedirs(folder) в своем коде на мой код