You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决Python中的PermissionError: [WinError 32]错误?

解决PermissionError: [WinError 32] 文件被占用问题

这个错误是Windows系统下的典型问题——当文件还被当前进程占用时,系统不允许对它执行重命名操作。看你的代码,问题根源很明确:

你在with open(...) as archivo:的代码块内执行了三次input()调用,这会让文件一直处于打开状态(with块要等内部所有代码执行完毕才会自动关闭文件)。当你调用os.rename时,文件还没被释放,所以触发了权限错误。

修复方案

把收集用户输入的逻辑移到with open代码块外面,先把所有新的联系人信息收集完毕,再打开文件写入内容。这样文件会被快速关闭,后续的重命名操作就能顺利执行了。

修改后的代码如下:

def editar_contacto():
    print('Escribe el nombre del contacto a editar')
    nombre_anterior = input('Nombre del contacto que desea editar: \r\n')
    # 编辑前检查该名称的文件是否存在
    existe = existe_contacto(nombre_anterior)
    if existe:
        # 先收集所有新信息,再打开文件
        nombre_contacto = input('Agregar el nuevo nombre: \r\n')
        telefono_contacto = input('Agrega el nuevo telefono: \r\n')
        categoria_contacto = input('Agrega la nueva Categoria: \r\n')
        # 实例化对象
        contacto = Contacto(nombre_contacto, telefono_contacto, categoria_contacto)
        
        # 打开文件写入内容,写完立刻自动关闭
        with open(CARPETA + nombre_anterior + EXT, 'w') as archivo:
            archivo.write('Nombre:' + contacto.nombre + '\r\n')
            archivo.write('Telefono:' + contacto.telefono + '\r\n')
            archivo.write('Categoria:' + contacto.categoria + '\r\n')
        
        nombre_del_file_anterior = f'contactos/{nombre_anterior}.txt'
        nombre_del_file_nuevo = f'contactos/{contacto.nombre}.txt'
        # 重命名文件
        os.rename(nombre_del_file_anterior, nombre_del_file_nuevo)
        # 显示成功信息
        print(' \r\n Contacto Editado correctament \r\n ')
    else:
        print('Este contacto no existe')

额外小提示

  • 可以加个判断:如果新文件名和旧文件名完全一致,直接跳过重命名操作,避免不必要的系统调用。
  • 确认CARPETA和EXT变量的路径格式正确,比如CARPETA应为'contactos/'、EXT应为'.txt',保证拼接后的路径和重命名时用的路径一致。

内容的提问来源于stack exchange,提问作者SavceBoyz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 16:44:06