我有一个指向某个目录的路径,我需要获得一个列表,列出所有不包含任何子目录的子目录。
例如,如果我有以下树:
-father_dir:
-son_dir1:
-grandson.txt
-son_dir2:
-grandson_dir1:
-greatgrandson1.txt
我想要一个包含以下内容的列表:[son_dir1, grandson_dir1]
我尝试过:我使用os.walk()
获取father_dir
中的所有子目录,现在我试图遍历每个子目录的内容(使用os.listdir()
)并查找它是否包含目录...到目前为止我还没有成功(因为os.listdir()
没有给出目录的路径,而只是它的名称),此外,这似乎是一种非常麻烦的方法。
欢迎任何简单的解决方案。谢谢!
答案 0 :(得分:8)
lowest_dirs = list()
for root,dirs,files in os.walk(starting_directory):
if not dirs:
lowest_dirs.append(root)
这是有效的,因为os.walk
通过目录进行递归,依次将每个目录设置为root
。您想知道它是否是最低级别的目录?这意味着它不包含其他目录,因此对于该根,如果dirs
为空,则将其丢弃在累加器中。
如果您还想跳过EMPTY最低级别的文件夹,请执行以下操作:
if files and not dirs:
如果您只想要尾部(文件夹名称,而不是整个路径),请使用:
lowest_dirs.append(os.path.split(root)[-1])
>>> lowest_dirs = list()
>>> toplevel = r"U:\User\adsmith\My Documents\dump\father_dir"
>>> for root,dirs,files in os.walk(toplevel):
... if not dirs:
... lowest_dirs.append(os.path.split(root)[-1])
>>> print(lowest_dirs)
['son_dir1', 'grandson_dir1']
答案 1 :(得分:3)
使用os.walk
和列表理解:
[os.path.split(r)[-1] for r, d, f in os.walk(tree) if not d]