在一个目录内的文件夹中创建多个子文件夹

问题描述:

我需要帮助在目录内的每个文件夹中创建多个子文件夹。我认为我很接近,但我一直在收到错误。我是Python的新手。这里是我的代码:在一个目录内的文件夹中创建多个子文件夹

import os 
rootpath = "C:\Users\test" 
sub_folders = ['map1', 'map2', 'map3', 'map4'] 
folders = [] 
for path in os.listdir(rootpath): 
    folders.append(os.join.path(rootpath, path)) 
    print folders # the folders list now contains the full path to each folder 
for f in folders: 
    os.makedirs(os.path.join(f, folders)) 

我不断收到错误消息:

Traceback (most recent call last): 
File "<interactive input>", line 2, in <module> 
File "C:\Python27\ArcGIS10.3\lib\ntpath.py", line 66, in join 
p_drive, p_path = splitdrive(p) 
File "C:\Python27\ArcGIS10.3\lib\ntpath.py", line 115, in splitdrive 
normp = p.replace(altsep, sep) 
AttributeError: 'list' object has no attribute 'replace' 
+0

这是整个代码?我不认为错误来自这段代码。 – Arman

+0

你为什么要做'os.path.join(f,folders)'其中'folders'是一个列表?你不应该为'文件夹'中的每个元素进行连接吗? –

Windows不喜欢这种说法rootpath = "C:\Users\test"有两个原因:(1)背面斜线与随后的字符组合(2)Windows不愿意允许非特权用户在Users文件夹中创建子文件夹。

以下是另一种选择。

>>> import os 
>>> rootpath = r'c:\Users\Bill\test' 
>>> os.mkdir(rootpath) 
>>> os.chdir(rootpath) 
>>> for sub_folder in ['map1', 'map2', 'map3', 'map4']: 
...  os.mkdir(sub_folder) 
...  
>>> 

把一个r在新的文件夹,以便向后斜杠按原文的名称前面。 创建新的子文件夹mkdir然后chdir它。 现在遍历您的子文件夹列表并使用mkdir创建它们中的每一个。

对于从python docs更多有关r和原始字符串:

字符串文字可以任选地以字母'r''R'前缀; 这样的字符串被称为原始字符串,并使用不同的规则 解释反斜杠转义序列

谢谢比尔。我修改了一下你的代码并找出了它。这是我做的:

import oS 
root_path =r"C:\Users\sworkman\test" 
sub_folders = ['Map1, Map2, Map3, Map4'] 
folders = [] 
for path in os.listdir(root_path): 
    folders.append(os.path.join(root_path, path)) 
    print folders 

for f in folders: 
    os.makedirs(os.path.join(f, folders)) 

for f in folders: 
    os.chdir(f) 
    for sub_folder in sub_folders: 
     os.mkdir(sub_folder) 

我没有意识到os.chdir方法。这非常有帮助。再次感谢。

+1

史蒂文,我不能声称了解你的代码。它一定做了你想做的事情。有一件事你可能不知道,与编码无关。如果您以这样的答案回答答案,通常原答复者将不会看到答案(在本例中为我)。这次我只是看到它而已。为了确保被发现,你应该对答案发表评论。无论如何,欢迎来到SO! –