Comments 34
Молодец! Нашёл к чему придраться!
Я рад что вы скурпулёзно просмотрели код. :)
лучше уж избегать проблем связанных с различными файловыми/операционными системами
к примеру в Windows в имени файла запрещено использование некоторых служебных символов: «\», «/», «:», «*», «?», «"», «<», «>», «|». как с «×» не знаю (да и проверить не на чем)
к примеру в Windows в имени файла запрещено использование некоторых служебных символов: «\», «/», «:», «*», «?», «"», «<», «>», «|». как с «×» не знаю (да и проверить не на чем)
А есть ли что-то подобное, но только чтоб упорядочить фотографии по дате создания?
Вот, попробуйте, подправил код выше ( правда сортирует все файлы а не только картинки :) ):
Copy Source | Copy HTML
- #!/usr/bin/env python
- # -*- coding: UTF-8 -*-
- """ sorts images by resolution"""
-
-
- import os,sys
- import time
-
- dirname = os.path.abspath(sys.argv[1])
- try:
- newdir = os.path.abspath(sys.argv[2])
- except:
- newdir = dirname
-
-
- def image_sort(dirname, newdir, recur= 0):
- if not recur:print 'sorting started ...'
- else: print 'sorting started in %s...'%dirname
- if not newdir: newdir = dirname
-
- imagelist = []
-
- if os.path.isdir(dirname):
- for x in os.listdir(dirname):
- absx = dirname+os.sep+x
- if os.path.isfile(absx):imagelist.append(absx)
- else:
- image_sort(absx, newdir+os.sep+x,recur=1)
- for name in imagelist:
- try:
- file_date = time.localtime(os.stat(name).st_mtime)
- except EnvironmentError, error:
- print 'seems error: %s with '%error, name, '/n'
- continue
- imdir = '%s--%s--%s'%(file_date.tm_year,file_date.tm_mon,file_date.tm_mday)
- imdir = os.path.join(newdir,imdir)
- if os.path.split(dirname)[-1] == os.path.split(imdir)[-1]:
- continue
- elif not os.path.exists(imdir):
- print 'making dir %s'%imdir
- os.mkdir(imdir)
- try:
- os.system('move "%s" "%s"'%(name,imdir))
- except EnvironmentError:
- print 'error with '+ name, '/n'
- if not recur:print 'sorting completed!'
-
- if __name__ == '__main__':
- image_sort(dirname, newdir)
Поправьте меня, если я не прав, но может лучше вместо вызова внешней утилиты move использовать функцию move из библиотеки shutil?
Да, будет лучше. Я все искал безуспешно эту функцию в модуле os, незнал что её запихали в такие дебри :)
Вот здесь есть уже готовая функция для переноса с учетом многих нюансов
code.djangoproject.com/svn/django/trunk/django/core/files/move.py
code.djangoproject.com/svn/django/trunk/django/core/files/move.py
дело не в быдло-коде, а в самой логике и ф-ционале
1) сделать выбор (перемещать существующие изображение или только скопировать в сортируемую диру)
2) перемещение файла не на всех ОСь move (mv)
3) опционально сделать выбор между:
а) ложим все изображения рекурсивно по дирам (вид images/sort/10x10; images/sort/subdir/10x20)
б) пихаем со всех субдир в одну сортируемую диру по разрешению изображений (images/sort/10x10, images/sort/10x20)
если это реализовать, будет уже на что то похоже
1) сделать выбор (перемещать существующие изображение или только скопировать в сортируемую диру)
2) перемещение файла не на всех ОСь move (mv)
3) опционально сделать выбор между:
а) ложим все изображения рекурсивно по дирам (вид images/sort/10x10; images/sort/subdir/10x20)
б) пихаем со всех субдир в одну сортируемую диру по разрешению изображений (images/sort/10x10, images/sort/10x20)
если это реализовать, будет уже на что то похоже
я бы на вашем месте эту пренебрежительно оторванную от сердца фразу про быдлокод убрал бы, ну или хотябы изменил, никто не идеален
Спасибо за указания на недочеты и лишнее \n. Насчет Exception: насколько я знаю то при таком указании получится, что исключения возбуждаемые sys.exit() тоже будут перехватываться, а это вроде как не очень хорошо. А насчет кавычек, не пойму зачем их экранировать ведь они разные.
Поясните эти моменты, если не сложно.
Поясните эти моменты, если не сложно.
Ваш вариант обработки исключиний «хороший». Нужно ловить только то что можешь обработать, остальное нужно идти на обработку обработчику верхнего уровня или обработчику по умолчанию если нет такого, который «положит» програму. А совет ловить все исключения в корне неправилен и за такое нужно железной линейкой по пальцам, единственное исключение, можна на самом верхнем уровне поставить обработчик того что уже никто не обработает, который непоготовленому пользователю выдаст «програма упала свяжитесь с поддержкой», а сам прологирует событие и «положит» програму.
Благодаря таким как вы… — я потихоньку изучаю питон.
absx = dirname+os.sep+x
Вы же ниже используете os.path.join, зачем тут такой изворот? :)
Вы же ниже используете os.path.join, зачем тут такой изворот? :)
молодца
А можно модернизировать скрипт: задавать 2 директории(откуда и куда) а также смотреть соотнощение сторон и сувать это на первый уровень (16:9/1280x720)?
Sign up to leave a comment.
Сортировка изображений по разрешению с помощью Python и PIL