Python - 获取目录和子目录的递归列表

时间:2018-01-31 21:26:00

标签: python

我想获得一个包含每个目录及其子目录的元组列表,例如,使用这样的树:

-A
---AA
---AB
-----ABA
-----ABB
-B
---BA
---BB

我会得到一个如下所示的列表:

[
    (A, [
            (AA, []),
            (AB, [
                     (ABA, []),
                     (ABB, []),
                 ]),
        ]),
    (B, [
            (BA, []),
            (BB, []),
        ]),
]

我对这些文件不感兴趣。

我尝试使用 os.walk('。'),但在转到下一个条目之前,我没有设法进入目录。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我们可以通过以下方式获取 immediate 子目录的列表:

from os import listdir
from os.path import join, isdir

subdirs = [join(d, o) for o in listdir(d) if isdir(join(d,o))]

我们可以通过递归方式使用它:

from os import listdir
from os.path import join, isdir

def obtain_subdir_tuples(d):
    subdirs = [join(d, o) for o in listdir(d) if isdir(join(d,o))]
    return (d, [obtain_subdir_tuples(subdir) for subdir in subdirs])

然而,一个潜在的问题是我们也可以遵循符号链接并陷入无限递归:目录中的符号链接指向该目录的父(或一般的anchestor)。在那种情况下,目录因此是某种程度上的孩子。我们可以通过首先查看它是否是islink的符号链接来避免这种情况:

from os import listdir
from os.path import join, isdir, islink

def obtain_subdir_tuples(d):
    subdirs = [join(d, o)
               for o in listdir(d)
               if isdir(join(d, o)) and not islink(join(d, o))]
    return (d, [obtain_subdir_tuples(subdir) for subdir in subdirs])