Как удалить изображение если его сторона меньше заданной

Есть папка с кучей картинок в формате jpg (более 10000 штук). Часть из них очень маленькие. Хочу написать программу, которая будет удалять картинки маленького формата, по заданным параметрам. Пока вариант такой, но он выдает ошибку дойдя до os.remove(path). В чем причина и как это исправить? Или подскажите другой вариант решения.


from PIL import Image
import os


directory = r'C:\Python works\Foto\ff'
files = os.listdir(directory)


s = 0
for i in files:
    if i.endswith('.jpg'):
        path = r'C:\Python works\Foto\ff\{}'.format(files[s])
        im = Image.open(path)
        width, height = im.size
        if width <= 100 or height <= 100:
            print("Найдено изображение {}".format(i))
            try:
                os.remove(path)
            except:
                print('Error')
            print('Удалено')
        s += 1

Ответы (2 шт):

Автор решения: n1tr0xs

Вы забыли закрыть изображение перед удалением

from PIL import Image
import os


directory = 'C:\\Python works\\Foto\\ff'
files = os.listdir(directory)


for i in files:
    if i.endswith('.jpg'):
        path = f'{directory}\\{i}'
        im = Image.open(path)
        width, height = im.size
        im.close()
        if width <= 100 or height <= 100:
            print(f'Найдено изображение {i}')
            try:
                print(path)
                os.remove(path)
            except:
                print(f'Error: {e}')
            print('Удалено')
→ Ссылка
Автор решения: MaxU

@n1tr0xs уже объяснил причину появления ошибки и как с ней бороться - я бы хотел предложить чуть более короткий и читаемый вариант:

from pathlib import Path      

def is_img_too_small(path, width=1000, height=1000):
    with Image.open(path) as im:
        size = im.size
    return size[0] < width or size[1] < height

удаляем все "*.jpg" файлы в директории, у которых хотя бы одна из сторон меньше 100:

p = Path(r"C:\Python works\Foto\ff")

_ = [f.unlink() for f in p.glob("*.jpg") 
     if is_img_too_small(f, width=100, height=100)]
→ Ссылка