如何在Python中创建一个子目录数组?

时间:2017-05-14 21:56:08

标签: python arrays directory operating-system sys

我想在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个目录。

与堆栈溢出中的其他帖子不同,我希望列表只包含没有元组或路径的目录名称。

2 个答案:

答案 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)