批量创建文件夹

时间:2015-05-25 07:36:50

标签: python directory mkdir

我正在尝试编写一个函数,在该函数中它将创建一个文件夹和子文件夹列表。

虽然我的代码如下,但我想知道是否有更好的方法可以创建子文件夹? (参见createFolders功能行5以后)

不是说子文件夹的命名会被改变,但是目前我正在对它进行硬编码,如果我必须创建更多的主/子文件夹,这可能会很痛苦......

import os

directory = '/user_data/TEST'

def createFolders():
    mainItems = ['Project_Files', 'Reference', 'Images']
    for mainItem in mainItems:
        os.makedirs(directory + '/' + str(mainItem))

    projDir = directory + '/' + str(mainItems[0])
    projItems = ['scene', 'assets', 'renders', 'textures']
    for projItem in projItems:
        os.makedirs(projDir + '/' + str(projItem))

if not os.path.exists(directory):
    print '>>> Creating TEST directory'
    os.makedirs(directory)
else:
    print '>>> TEST exists!'

createFolders()

感谢任何建议!

2 个答案:

答案 0 :(得分:1)

根据documentation makedirs的递归目录创建功能,这意味着它会创建一个传递给它的完整路径。因此,不是为子文件夹创建循环,而是可以创建所需路径的列表,并将它们逐个传递给os.makedirs,例如:

folders = ['/user_data/TEST/Project_Files/scene', '/user_data/TEST/Project_Files/assets', '/user_data/TEST/Project_Files/renders', '/user_data/TEST/Project_Files/textures']
for path in folders:
    os.makedirs(path)

答案 1 :(得分:1)

您应该使用os.path.join来连接路径。 str是不必要的。您可以使用嵌套列表来定义子文件夹的结构:

import os

directory = '/user_data/TEST'

def create_folders(basedir, subfolders):
    for subfolder in subfolders:
        if isinstance(subfolder, (list, tuple)):
            create_folders(os.path.join(basedir, subfolder[0]), subfolder[1])
        else:
            os.makedirs(os.path.join(basedir, subfolder))

create_folders(directory, [
    ('Project_Files', ['scene', 'assets', 'renders', 'textures']),
    'Reference', 'Images'])