如何解决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
相关产品推荐
相关产品推荐

