使用shutil.rmtree、os.remove、os.rmdir 返回 PermissionError: [WinError 5] Access is denied 问题解决!

源使用了shutil.rmtree(del_path)。虽然删除了文件夹的所有文件,但是无法删除这个空文件夹,并抛出错误,继而想使用os.removeos.rmdir去删除这个空文件夹也得到同样的错误:

PermissionError: [WinError 5] 拒绝访问。: 'D:\\PycharmProjects\\flask003\\apps\\static\\uploads\\杀杀杀'

我通过Windows10给anaconda的python.exe赋予完全控制的权限,也不能解决问题。

最后找到问题原因:

似乎有问题的文件夹具有顽固的只读属性,而shutil.rmtree不会在Windows上删除只读文件。

解决办法:

shutil.rmtree添加一个错误处理函数来更改这样的只读标志,该函数在删除文件时会遇到问题,您可以使用它来强制删除有问题的文件。

import os, stat
import shutil

def remove_readonly(func, path, _):
    "Clear the readonly bit and reattempt the removal"
    os.chmod(path, stat.S_IWRITE)
    func(path)

shutil.rmtree(directory, onerror=remove_readonly)

python - 使用python os.rmdir时,获取PermissionError:[WinError 5]访问被拒绝
What user do python scripts run as in windows? [duplicate]
Deleting directory in Python

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值