在实际应用中,经常遇到需要删除空目录的情况,手动一一删除效率太低。
通过Python标准库os
可方便实现嵌套空目录的删除。
问题
假设现有test
目录结构如下,需要删除test
目录中的空目录。
test
└─1
│ 1.txt
│
└─2
└─3
解决方法要点
- 利用
os.rmdir
方法删除空目录,当目录不为空时,会抛出异常。 - 利用
os.walk
方法遍历test
目录。注意os.walk
方法的topdown
参数。topdown
参数为遍历方式,布尔值,默认值为True
:topdown
参数为True
时,采用自上而下
的遍历模式。从根目录向子目录遍历。topdown
参数为False
时,采用自下而上
的遍历模式。从子目录向根目录遍历。
在本例中需要删除嵌套目录,因此,topdown
参数的值应为False
,否则只能删除嵌套最深的一个子目录。
代码
import os
def remove_empty_dir(path):
for (root, dirs, files) in os.walk(path, topdown=False):
for item in dirs:
dir = os.path.join(root, item)
try:
os.rmdir(dir)
print(dir)
except Exception as e:
pass
if __name__ == '__main__':
path =r'd:\test'
remove_empty_dir(path)
由于子目录1
还与1个文件不为空,所以未能删除。
输出为:
d:\test\1\2\3
d:\test\1\2