递归的妙用——删除一个文件夹下的所有文件
在帮助客户解决需求的过程中,我们经常会遇到这样的情况:在机器人运行的过程中会在某个文件夹下生成一系列文件,等到第二次运行时,需要将这个文件夹中的所有文件,包括其中的文件和文件夹都删除。为此,可以设计一个函数来解决这个问题。
删除文件用
os.remove
,删除文件夹用os.rmdir
,判断是否是文件夹用os.path.isdir
。另外,对于不为空的文件夹,直接使用os.rmdir
会报 OSError 的错误。
这个函数接受一个输入,为需要删除其中所有文件的文件夹所在的路径,并对其中的所有文件执行删除操作。函数的逻辑如下:首先遍历文件夹并获取其中子文件的所有路径,然后依次执行删除,如果碰到的是文件,就直接删除;如果碰到的是文件夹,就先判断文件夹是不是为空,如果为空就直接删除,否则对这个子文件夹执行递归,并在之后将这个子文件夹删除。
以下是完整函数:
def remove_file_in_dir(path):
'''
递归方式删除一个文件夹下的所有东西
'''
for i in os.listdir(path):
child_path = os.path.join(path, i)
if os.path.isdir(child_path):
try:
os.rmdir(child_path)
except OSError:
remove_file_in_dir(child_path)
os.rmdir(child_path)
else:
os.remove(child_path)
赞
这个实用