Mon code est pour un script qui regarde un dossier et supprime les images qui sont sous une résolution de 1920x1080. Le problème que j'ai est que lorsque mon code s'exécute;
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)
Je reçois ce message d'erreur:
Traceback (most recent call last):
File "C:\Users\Harold\Desktop\imagefilter.py", line 12, in <module>
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'
Juste pour confirmer, Python est le seul programme en cours d'exécution sur mon ordinateur. Quelle est la cause de ce problème et comment le résoudre?
Votre processus est celui qui a le fichier ouvert (via im
toujours existant). Vous devez d'abord le fermer avant de le supprimer.
Je ne sais pas si PIL prend en charge les contextes with
, mais si c'est le cas:
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)
Cela vous assurera de supprimer im
(et de fermer le fichier) avant d'arriver à os.remove
.
Si ce n'est pas le cas, vous voudrez peut-être consulter Pillow, car le développement de PIL est à peu près mort.
Je rencontrais le même problème, mais l'erreur était intermittente. Si vous codez votre fichier en ouverture/fermeture correctement et que vous rencontrez toujours cette erreur, assurez-vous que vous ne synchronisez pas les fichiers avec Dropbox, Google Drive, etc. J'ai suspendu Dropbox et je ne vois plus l'erreur.
Il s'agit essentiellement d'une erreur d'autorisation, il vous suffit de fermer le fichier avant de le supprimer. Après avoir obtenu les informations sur la taille de l'image, fermez l'image avec
im.close()