递归的妙用——删除一个文件夹下的所有文件

在帮助客户解决需求的过程中,我们经常会遇到这样的情况:在机器人运行的过程中会在某个文件夹下生成一系列文件,等到第二次运行时,需要将这个文件夹中的所有文件,包括其中的文件和文件夹都删除。为此,可以设计一个函数来解决这个问题。

删除文件用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)