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

вопрос создан в Fri, Mar 29, 2019 12:00 AM

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

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

Сгенерированные файлы - это разные тексты, извлеченные из книги с использованием REGEX. Я хочу, чтобы программа зацикливалась на всех совпадениях REGEX и автоматически помещала каждое совпадение в файл (каждый текст совпадал с файлом). Эти текстовые файлы должны храниться в этой вновь созданной папке, названной пользователем.

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

  

Chapter1.txt Traceback (последний вызов был последним): файл   "/Users/nataliaresende/Dropbox/PYTHON/word_concatenator_final.py",   строка 375, в       Файл меню () "/Users/nataliaresende/Dropbox/PYTHON/word_concatenator_final.py",   строка 365, в меню       Отдельный файл_chapters () "/Users/nataliaresende/Dropbox/PYTHON/word_concatenator_final.py",   строка 224, в отдельных главах       os.makedirs (папка) Файл "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/os.py",   линия 221, в македорах       mkdir (имя, режим) FileExistsError: [Errno 17] Файл существует: '/Users /nataliaresende /Dropbox /PYTHON /folder'

Кто-нибудь имеет представление о том, что происходит? Может быть, заступ?

us=input('\n\nEnter 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('\n\nThis book contains',len(my_chapters), 'chapters')

    user2=input('\n\nWrite 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('\n\n', chap)

print('\n\nChapters 1 -',len(my_chapters), 'written to a file separately. Check your folder named "Chapters" in your directory')
    
0
  1. os.makedirs(folder) Вы пытаетесь создать одну и ту же папку более одного раза. Переместите это из цикла и используйте параметр exist_ok .
    2019-03-29 11: 04: 17Z
  2. @ JohnnyMopp, хорошо! Я переместил os.makedirs (папку) и также обновил код. Можете ли вы показать мне параметр exist_ok? Может быть, обновить мой код?
    2019-03-29 11: 08: 05Z
  3. os.makedirs(folder, exist_ok=True) Также обратите внимание, что если user2 != 'Y', переменные folder и folder_name будут неопределенными.
    2019-03-29 11: 10: 51Z
  4. что еще добавить: продолжить в цикле?
    2019-03-29 11: 25: 38Z
1 ответ                              1                         

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

if not os.path.exists(folder):
    os.makedirs(folder)
    
0
2019-03-29 12: 54: 58Z
  1. Хорошо, но где я могу включить это в код?
    2019-03-29 14: 08: 55Z
  2. Замените os.makedirs(folder) в своем коде на мой код
    2019-03-29 14: 10: 16Z
источник размещен Вот