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

How can I make an array of subdirectories in Python?

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

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

如果您只是想要目录名称,您可以使用os.walk来完成此操作:

os.walk(目录) 将为每个子目录生成一个元组。三元组中的第一个条目是目录名。您可以将其包装在一个函数中以简单地 return 目录名称列表,如下所示:

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

应该给你所有的目录。

如果您想要的只是指定目录的子目录列表,那么您只需要 os.listdir 和一个仅显示目录的过滤器。

就这么简单:

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

来自os.listdir的return是一个列表,包含指定目录(或默认为.)、目录和文件中所有可用元素的名称。我们仅使用 os.path.isdir 过滤目录。然后,如你所愿list,我们显式转换过滤后的结果

您将无法 print 过滤后的结果,但您可以对其进行迭代。下面的代码片段将获得与 one 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)