python shutil.rmtree()在windows删除.git目录提示权限问题

本文解决了一个常见的Python编程问题,当尝试使用shutil.rmtree删除包含只读文件的目录时,会遇到权限错误。文章详细介绍了如何通过修改文件权限来避免这一问题,并提供了一段实用的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在做一个业务需求,需要将git库上代码下载下来之后,然后删除.git目录,直接使用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, οnerrοr=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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值