Python - Созданное количество вложенных папок

Я пытаюсь создать несколько вложенных папок в python.

Задача: 1) Спросите у пользователя номер (скажем, 3) 2) Создайте 3 папки. 3) Внутри каждой папки должно быть по 3 папки. Это гнездование нужно проделать 3 раза.

Пример:

Folder1 

Папка1 Папка2 Папка3

Папка1 Папка2 Папка3

Папка1 Папка2 Папка3

Folder2 

Папка1 Папка2 Папка3

Папка1 Папка2 Папка3

Папка1 Папка2 Папка3

Folder3 

Папка1 Папка2 Папка3

Папка1 Папка2 Папка3

Папка1 Папка2 Папка3

Это мой текущий код:

import os
i = 0
num = 0
while i<17:
    num+=1
    name="Python"+ str(num)
    i+=1

Это только для создания первого набора папок (я взял 17). Помощь будет очень признательна.

(Я использую Windows)

РЕДАКТИРОВАТЬ:

Для более наглядного примера: http://s9.postimg.org/sehux992n/20141228_201038.jpg

(Принимая 3 в качестве пользовательского ввода)

На изображении мы видим, что есть 3 слоя.


person adb16x    schedule 28.12.2014    source источник
comment
Звучит специально для рекурсивной функции.   -  person Hugh Bothwell    schedule 28.12.2014
comment
Да, но я не знаю, как продолжить после этого   -  person adb16x    schedule 28.12.2014
comment
так пользователь вводит 1 число или 2?   -  person Padraic Cunningham    schedule 28.12.2014
comment
Пользователь вводит желаемое число (меньше 50, так как это экспоненциальная функция).   -  person adb16x    schedule 28.12.2014
comment
Как и в примере, они должны называться следующим образом: Folder1, Folder2 .....   -  person adb16x    schedule 28.12.2014


Ответы (2)


Частичный код, не стесняйтесь заполнять пробелы:

def recursive_make_folders(path, width, depth):
    for i in range(1, width + 1):
        folder_name = make_folder_name(i)
        make_folder(path + folder_name)
        if depth > 1:
            recursive_make_folders(path + folder_name, width, depth - 1)

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

Изменить:

  • где я показываю path + folder_name, вам нужно будет использовать os.path.join(path, folder_name)
  • make_folder должен стать os.mkdir
  • если вы хотите, чтобы код запускался в текущем каталоге, вы можете использовать "." в качестве начального пути
person Hugh Bothwell    schedule 28.12.2014
comment
При вводе пути Python возвращает недопустимую синтаксическую ошибку. (Для буквы диска). Предположим, я хотел создать его в текущем каталоге? - person adb16x; 28.12.2014
comment
Что такое make_folder_name? - person adb16x; 28.12.2014
comment
Я добавил ссылку, которая лучше объясняет вложение - person adb16x; 28.12.2014

Внутри папки не может быть подкаталогов с одинаковыми именами. Если вы хотите добавить входные * входные каталоги с разными именами:

import os

inp = int(raw_input())

folders = [("Folder{}".format(i)) for i in xrange(1,inp+1)]
for dr in xrange(1,inp+1):
    os.makedirs("Folder{}".format(dr))
for fold in folders:
    os.chdir(fold)
    for i in xrange(1, inp*inp+1):
        os.makedirs("Folder{}".format(i))
    os.chdir("..")

Может быть, это ближе к тому, что вы хотите:

import os

inp = int(raw_input())

folders = [("Folder{}".format(i)) for i in xrange(1, inp+1)]
for fold in folders:
    os.makedirs(fold)
    os.chdir(fold)
    for fold in folders:
        os.mkdir(fold)
        os.chdir(fold)
        for fold in folders:
            os.mkdir(fold)
        os.chdir("..")
    os.chdir("..")
person Padraic Cunningham    schedule 28.12.2014
comment
@WhiteFlameAB, я немного не уверен в ваших требованиях к вложенности, как я сказал в своем комментарии, можете ли вы добавить одно полное дерево папок, когда ввод равен 3. Как только я точно пойму, что вы имеете в виду, это просто вопрос вложения для петля - person Padraic Cunningham; 28.12.2014
comment
Я добавил ссылку, которая лучше объясняет вложение - person adb16x; 28.12.2014