我想获得一个包含每个目录及其子目录的元组列表,例如,使用这样的树:
-A
---AA
---AB
-----ABA
-----ABB
-B
---BA
---BB
我会得到一个如下所示的列表:
[
(A, [
(AA, []),
(AB, [
(ABA, []),
(ABB, []),
]),
]),
(B, [
(BA, []),
(BB, []),
]),
]
我对这些文件不感兴趣。
我尝试使用 os.walk('。'),但在转到下一个条目之前,我没有设法进入目录。
有什么想法吗?
答案 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])