2014-11-30 8 views
2

Мой код предназначен для сценария, который смотрит в папку и удаляет изображения, которые находятся под разрешением 1920x1080. Проблема, с которой я сталкиваюсь, заключается в том, что когда мой код работает;PermissionError: [WinError 32] Процесс не может получить доступ к файлу, потому что он используется другим процессом

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) 

Я получаю сообщение об ошибке:

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' 

Просто, чтобы подтвердить, Python это единственная программа работает на моем компьютере. Что вызывает эту проблему и как ее исправить?

ответ

4

Ваш процесс является тем, у которого открыт файл (через im все еще существует). Прежде чем удалять его, вы должны закрыть его.

Я не знаю, если PIL поддерживает with контексты, но если это так:

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) 

Это удостоверится удалить im (и закройте файл), прежде чем попасть в os.remove.

Если это не так, вы можете проверить Подушку, так как разработка PIL в значительной степени мертва.

+0

который работал. спасибо вам, легенда: D – user2885647

+0

Не забудьте нажать галочку рядом с ответом. –

+3

подушка также работает в 3.x, пил нет. –

4

Я столкнулся с той же проблемой, но ошибка была прерывистой. Если вы правильно кодируете или открываете файл правильно и все еще запутываете эту ошибку, убедитесь, что вы не синхронизируете файлы с Dropbox, Google Диском и т. Д. Я приостановил Dropbox, и я больше не вижу ошибки.

Смежные вопросы

 Смежные вопросы