解决使用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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值