获取树中最低子目录的列表
我有一个文件夹的路径,我需要获取这个文件夹下所有的子文件夹,并且这些子文件夹里面不能再有其他子文件夹。
举个例子,如果我的文件夹结构是这样的:
-father_dir:
-son_dir1:
-grandson.txt
-son_dir2:
-grandson_dir1:
-greatgrandson1.txt
我想得到一个列表,里面包含:[son_dir1, grandson_dir1]
我尝试过的方法是:我使用了os.walk()
来获取father_dir
下的所有子文件夹,然后我想遍历每个子文件夹的内容(用os.listdir()
),看看里面是否还有其他文件夹……到目前为止我没有成功(因为os.listdir()
只返回文件夹的名字,而不是它的完整路径),而且这个方法似乎也挺麻烦的。
如果有简单的解决方案,我会很感激。谢谢!
2 个回答
4
使用 os.walk
和列表推导式:
[os.path.split(r)[-1] for r, d, f in os.walk(tree) if not d]
16
lowest_dirs = list()
for root,dirs,files in os.walk(starting_directory):
if not dirs:
lowest_dirs.append(root)
这个方法之所以有效,是因为 os.walk
会遍历所有的文件夹,把每个文件夹依次设置为 root
。你想知道某个文件夹是不是最底层的文件夹吗?这就意味着它里面没有其他的文件夹,所以如果这个 root
的 dirs
是空的,就把它放到一个收集器里。
如果你还想跳过空的最底层文件夹,可以这样做:
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']