解决使用shutil.rmtree无法删除文件夹的方案

问题描述: 在使用该函数的时候,程序出弹出“PermissionError: [WinError 5] 拒绝访问。”,从字面意思来看,是权限问题,不允许进行文件的删除。
原来代码如下:


def clear_folder(path):
    """
    clear specified folder
    :param path: the path where need to clear.
    :return:
    """
    if os.path.exists(path):
        shutil.rmtree(path)

    time.sleep(1)
    os.mkdir(path)

解决方案: 在path目录下的部分文件或目录是只读的,从而会导致该操作失败,需要在操作出错的时候,将文件或文件夹的状态修改为支持写的模式。这里需要使用shutil.rmtree的onerror这个参数,这里需要实现文件权限修改的回调函数,通过onerror带入。

修改后代码如下:

def clear_folder(path):
    """
    clear specified folder
    :param path: the path where need to clear.
    :return:
    """
    if os.path.exists(path):
        shutil.rmtree(path, onerror=readonly_handler)

    time.sleep(1)
    os.mkdir(path)

def readonly_handler(func, path, execinfo):
    os.chmod(path, stat.S_IWRITE)
    func(path)

如果按照上述修改还有拒绝访问的情况,可以尝试右键python.exe,选择“兼容性”标签页,在特权等级框里面将“以管理员身份运行此程序”进行勾选。

转载于:https://my.oschina.net/hechunc/blog/3078597

你可能感兴趣的:(解决使用shutil.rmtree无法删除文件夹的方案)