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

How can I make an array of subdirectories in Python?

我想在python中创建一个子目录数组。下面是一个布局和模型列表示例。

1
2
3
4
5
                             Root
                              |
                         directories
                            /    \
                      subdir_1... subdir_n

因此,从根目录开始,我想运行一个程序,它将列出所有子目录。如果我这样写:

1
print(List_of_Subdirectories)

其中,子目录列表是附加目录的列表。我将获得输出:

1
[subdir_1, subdir_2, ... , subdir_n]

本质上,我希望获得相同的结果,就好像我要将每个目录硬编码成一个列表一样。例如:

1
List_of_Subdirectories = ["subdir_1","subdir_2", ... ,"subdir_n"]

其中,subdir_n表示任意第n个目录。

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


如果你只是想名称的目录,你可以使用这个os.walk大原因:

os.walk(目录) 将对每一个tuple subdirectory产量。第一个进入的是一个3 - tuple目录的名字。你可以在一个大的wrap这个函数返回的是列表的目录的名称,比如:

1
2
3
4
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

应该给你所有directories。


如果所有你想要的是一个安全的subdirectories的规定列出的目录,所有你需要的是一只大os.listdir directories滤波和显示。

这是作为简单的为:

1
2
List_of_Subdirectories = list(filter(os.path.isdir, os.listdir()))
print(List_of_Subdirectories)

os.listdir的回报是一个列表包含的所有元素的名称可在规定(或由安装默认目录.),directories和文件。我们唯一的directories os.path.isdir滤波器使用。然后你想,作为一个list,我们将filtered explicitly的结果。

你不会是printfiltered能的结果,但你会iterate能超过它。下面的snippet会以实现相同的结果作为一个avobe。

1
2
3
4
5
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)