Создавать папку после каждого выполнения с разными именами

#python #file-io #directory

#python #file-io #каталог

Вопрос:

Я пытаюсь создать программу, которая создает новую папку с разными именами внутри папки для каждого выполняемого выполнения. Я вставил приведенный ниже код, который я использую:

 import os


current_directory = os.getcwd()
name = "Day 1"


def folder_create(path, folder_name):
    folder_names = [folder for folder in os.listdir(
        path) if os.path.isdir(folder)]
    if folder_name not in folder_names:
        os.makedirs(folder_name)
    else:
        folder_num = folder_name.split(' ')[1]
        new_folder_name = f'Day {int(folder_num)   1}'
        os.makedirs(new_folder_name, exist_ok=False)
        folder_name = new_folder_name
    return folder_name


if __name__ == '__main__':
    name = folder_create(current_directory, name)
    print(name)
  

Этот код работает только дважды, что означает, что он способен создавать только две папки, т.е. (День 1 и день 2) после выполнения два раза, но после этого он выдает FileExistError . Пожалуйста, помогите мне найти обходной путь, поскольку я просто хочу, чтобы он создавал новую папку с именем каждого следующего дня, например (День 1, день 2, день 3) для каждого выполняемого времени.

Ответ №1:

Это будет хорошо работать. Реальная проблема с вашим кодом заключалась в том, что вы продолжали указывать один и тот же аргумент «name» для folder_create() функции.

Все, что я сделал, это устранил необходимость указывать аргумент name.

Вместо этого теперь он получает список каталогов, сортирует список, затем получает последний, используя отрицательную индексацию. Затем он использует последнее, создающее новое имя папки. получайте удовольствие

 import os


current_directory = os.getcwd()
name = "Day 1"


def folder_create(path):
    folder_names = [folder for folder in os.listdir(
        path) if os.path.isdir(folder)]
    folder_names.sort()
    if "Day 1" not in folder_names:
        os.makedirs('Day 1')
    else:
        folder_num = folder_names[-1].split(' ')[1]
        new_folder_name = f'Day {int(folder_num)   1}'
        os.makedirs(new_folder_name, exist_ok=False)
        folder_name = new_folder_name
    return folder_name


if __name__ == '__main__':
    name = folder_create(current_directory)
    print(name)
  

Ответ №2:

Это решение может сработать для вас-

 import os
import random


current_directory = os.getcwd()
day_names = []

for i in range(0, 10 1):  # 10 or Or Other Number 1 To Get Day Names That Number Of Times
    day_names.append('Day ' str(i))


def folder_create(path, folder_name):
    folder_names = [folder for folder in os.listdir(
        path) if os.path.isdir(folder)]
    if folder_name not in folder_names:
        os.makedirs(folder_name)
    else:
        folder_num = folder_name.split(' ')[1]
        new_folder_name = f'Day {int(folder_num)   random.randint(0, 10000)}'  # To Get A Random Day Name If It Already Exixts
        os.makedirs(new_folder_name, exist_ok=False)
        folder_name = new_folder_name
    return folder_name


if __name__ == '__main__':
    for name in day_names:  # Looping To Get Each Day Name
        name = folder_create(current_directory, name)
        print(name)

  

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

1. Спасибо @Aryan за ответ, но, используя ваше решение, я могу генерировать 10 папок, например (.. День 10), все сразу, я подумал, возможно ли генерировать каждую папку для каждого выполнения. Пожалуйста, дайте мне знать, как мне это сделать.

2. Хорошо, позвольте мне попробовать.

3. это решение генерирует случайные имена папок, хотя op не указывал случайность. попробуйте удалить это, возможно

4. Да, это сработает @TochiBedford. Спасибо, что сообщили об ошибке 🙂