Открыть список
Как стать автором
Обновить

Сортировка изображений по разрешению с помощью Python и PIL

Python
image

Захотелось зарегистрироваться на Хабре, но так как знаниями особо не блещу, а аудитория тут как раз наоборот, решил попробовать выложить скрипт на питоне, который написал по просьбе знакомого за бутылку 7апа :) Мне скриптик так же помог упорядочить свалку картинок ~15гб.

Скрипт проходит по директории и создает в ней папки вида ШиринахВысота и пихает туда соответствующие по разрешению изображения.

P.S. Ошибок не совершает тот, кто ничего не делает.



Copy Source | Copy HTML
  1. #!/usr/bin/env python
  2. # -*- coding: UTF-8 -*-
  3. """ sorts images by resolution"""
  4. import os,sys
  5. from PIL import Image
  6. # задаёт директорию для сортировки
  7. dirname = os.path.abspath(sys.argv[1])
  8. try:
  9. newdir = os.path.abspath(sys.argv[2])
  10. except:
  11. newdir = dirname
  12. def image_sort(dirname, newdir, recur= 0):
  13. if not recur:print 'sorting started ...' # если главная папка
  14. else: print 'sorting started in %s...'%dirname # если подпапка
  15. # собирает все подпапки в список и рекурсивно обходит
  16. imagelist = []
  17. if os.path.isdir(dirname):
  18. for x in os.listdir(dirname):
  19. absx = dirname+os.sep+x
  20. if os.path.isfile(absx):imagelist.append(absx)
  21. else:
  22. #print 'summon subsort in %s'%x
  23. image_sort(absx, newdir+os.sep+x,recur=1)
  24. # проходит по содержимому папки/подпапки
  25. for name in imagelist:
  26. try:
  27. resolution = Image.open(name).size #получить разрешение
  28. except IOError:
  29. print 'seems not image: '+ name, '/n'
  30. continue
  31. imdir = '%sx%s'%(resolution[ 0],resolution[1])
  32. imdir = os.path.join(newdir,imdir)
  33. #если имя папки такое же как и разрешение картинки
  34. if os.path.split(dirname)[-1] == os.path.split(imdir)[-1]:
  35. continue
  36. elif not os.path.exists(imdir):
  37. #print 'making dir %s'%imdir
  38. os.mkdir(imdir)
  39. try:
  40. os.system('move "%s" "%s"'%(name,imdir))
  41. except WindowsError:
  42. print 'error with '+ name, '/n'
  43. if not recur:print 'sorting completed!'
  44. if __name__ == '__main__':
  45. image_sort(dirname, newdir)
Теги:PythonPILсортировка картинок по разрешению
Хабы: Python
Всего голосов 63: ↑49 и ↓14 +35
Просмотры5K

Похожие публикации

Senior Python Engineer (remote)
от 200 000 до 300 000 ₽Spark EquationСанкт-ПетербургМожно удаленно
Python разработчик
от 90 000 до 180 000 ₽AGORAМожно удаленно
Python-разработчик
от 70 000 ₽Сима-лендМожно удаленно
Разработчик Python
от 100 000 до 100 000 ₽СберСанкт-Петербург

Лучшие публикации за сутки