#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)
в своем коде на мой код