Есть ли более эффективный способ создания папок?

#python #python-3.x #windows-10

#python #python-3.x #windows-10

Вопрос:

Я создаю папки для каждого класса для размещения ресурсов. Имена папок для классов соответствуют следующему (очень оригинальному) формату; ‘Class (01), Class (02), …, Class (63)’.

Я использовал следующий код для создания папок, но ищу более эффективный метод.

 >>> import os
>>> path=r'C:UsersDesktopClassesClass ('
>>> z=[str(i) for i in range(1,30)]
>>> folders=[path  z[i]  ')' for i in range(len(z))]
>>> for i in range(len(folders)):
...     os.makedirs(folders[i])
  

Я получаю папки, но для классов 1-9 имена папок ‘Class (1) … Класс (9)’. Есть ли способ сделать так, чтобы эти имена были ‘Class (01) … Class (09)’?
Кроме того, есть ли более эффективный способ создания этих папок? По какой-то причине я чувствую, что строк слишком много.

Ответ №1:

Используйте str.zfill и os.path.join :

 import os

path = '/pardir/'
folders = [os.path.join(path, "Class (%s)" % str(i).zfill(2)) for i in range(1,64)]
for folder in folders:
    os.makedirs(folder)

Output:
/pardir/Class (01)
/pardir/Class (02)
...
/pardir/Class (62)
/pardir/Class (63)
  

Ответ №2:

Есть ли способ сделать так, чтобы эти имена были ‘Class (01) … Class (09)’?

f'{foo:02}' обнулит ваш номер до 2 знаков после запятой. Если вам нужно, чтобы он был динамическим, вы должны использовать zfill .

Вам не нужно создавать z или folders вручную.

Как насчет этого:

 >>> import os
>>> path=r'C:UsersDesktopClassesClass ('
>>> for i in range(1,30):
...     os.makedirs(f'{path}{i})')
  

Ответ №3:

Предполагая, что вы используете относительно современную версию Python, вы можете указать левое заполнение с помощью строки формата,

 import os

for class_num in range(1, 30):
    folder_name = r"C:UsersDesktopClassesClass ({:02d})".format(
        class_num
    )

    os.makedirs(folder_name)
  

Также вы можете избежать сохранения некоторых промежуточных значений в виде списков.