PermissionError: El proceso no puede acceder al archivo porque está siendo usado por otro proceso

Mi código es para una secuencia de comandos que mira una carpeta y elimina imágenes que están bajo una resolución de 1920×1080. El problema que tengo es que cuando mi código se ejecuta;

import os from PIL import Image while True: img_dir = r"C:\Users\Harold\Google Drive\wallpapers" for filename in os.listdir(img_dir): filepath = os.path.join(img_dir, filename) im = Image.open(filepath) x, y = im.size totalsize = x*y if totalsize < 2073600: os.remove(filepath) 

Me sale este mensaje de error:

 Traceback (most recent call last): File "C:\Users\Harold\Desktop\imagefilter.py", line 12, in  os.remove(filepath) PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: 'C:\\Users\\Harold\\Google Drive\\wallpapers\\Car - ABT Audi RS6-R [OS] [1600x1060].jpg' 

Solo para confirmar, Python es el único progtwig que se ejecuta en mi computadora. ¿Qué está causando este problema y cómo lo soluciono?

Su proceso es el que tiene el archivo abierto (a través de im todavía existente). Necesita cerrarlo primero antes de borrarlo.

No sé si PIL soporta with contextos, pero si lo hizo:

 import os from PIL import Image while True: img_dir = r"C:\Users\Harold\Google Drive\wallpapers" for filename in os.listdir(img_dir): filepath = os.path.join(img_dir, filename) with Image.open(filepath) as im: x, y = im.size totalsize = x*y if totalsize < 2073600: os.remove(filepath) 

Esto se asegurará de eliminar im (y cerrar el archivo) antes de llegar a os.remove .

Si no es así, es posible que desee revisar Pillow, ya que el desarrollo de PIL está prácticamente muerto.

Me encontré con el mismo problema, pero el error fue intermitente. Si está codificando su archivo para abrir / cerrar correctamente y aún tiene este error, asegúrese de no estar sincronizando los archivos con Dropbox, Google Drive, etc. Hice una pausa en Dropbox y ya no veo el error.

Esto es básicamente un error de permiso, solo necesita cerrar el archivo antes de eliminarlo. Después de obtener la información del tamaño de la imagen, cierre la imagen con

 im.close()