我想在Python中创建一个子目录数组。这是我想要获得的示例布局和模型列表。
Root
|
directories
/ \
subdir_1... subdir_n
因此,从根目录开始,我想运行一个程序,它将列出所有子目录。这样,如果我写:
print(List_of_Subdirectories)
List_of_Subdirectories是附加目录的列表。我会得到输出:
[subdir_1, subdir_2, ... , subdir_n]
从本质上讲,我希望获得相同的结果,就像我将每个目录硬编码到列表中一样。例如:
List_of_Subdirectories = ["subdir_1", "subdir_2", ... , "subdir_n"]
其中subdir_n表示任意第n个目录。
与堆栈溢出中的其他帖子不同,我希望列表只包含没有元组或路径的目录名称。
答案 0 :(得分:1)
如果只想要目录名称,可以使用os.walk执行此操作:
os.walk(目录) 将为每个子目录生成一个元组。 3元组中的第一个条目是目录名称。您可以将它包装在一个函数中,只需返回目录名列表,如下所示:
def list_paths(path):
directories = [x[1] for x in os.walk(path)]
non_empty_dirs = [x for x in directories if x] # filter out empty lists
return [item for subitem in non_empty_dirs for item in subitem] # flatten the list
应该为您提供所有目录。
答案 1 :(得分:-1)
如果你想要的只是一个指定目录的子目录列表,你只需要os.listdir和一个只显示目录的过滤器。
这很简单:
List_of_Subdirectories = list(filter(os.path.isdir, os.listdir()))
print(List_of_Subdirectories)
从os.listdir
返回的是一个列表,其中包含指定目录(或默认为.
),目录和文件中所有可用元素的名称。我们只使用os.path.isdir
过滤目录。然后,如您所希望的那样list
,我们会明确转换过滤后的结果。
您将无法print
过滤后的结果,但您可以对其进行迭代。下面的代码段将获得与一个avobe相同的结果。
directory_elements = filter(os.path.isdir, os.listdir())
List_of_Subdirectories = []
for element in directory_elements:
List_of_Subdirectories.append(element)
print(List_of_Subdirectories)