Данный пост является продолжением поста "Восстановление и каталогизация фотографий"
Казалось бы восстановление утраченных фотографий окончено, но при беглом осмотре обнаружились повреждённые фотографии, которые бы неплохо отсеить. Фотографий много, поэтому вручную каждую просматривать не вариант. В поиках вариантов обратил внимание на модуль для работы с изображениями PIL. Путём экспериметов обнаружилась закономерность: на всех проверенных повреждённых фотографиях функция histogram выбрасывала исключение. Эта особенность и была положена в основу приведённого ниже скрипта. Он (скрипт) принимает два аргумента: исходную директорию и результирующую директорию. Скрипт проходит исходную директорию, включая поддиректории, и переносит повреждённые изображения в результирующую директорию. Так же переносимые файлы переименовываются по следующиему шаблону: [имя_директории]_[имя_фала]. В ситуации с вложенностью, описанной в предыдущей статье, это обеспечивает несовпадение имён.
Вот собственно текст скрипта:
#!/usr/bin/env python
import os
import sys
import Image
import shutil
def check_file(file, output_dir):
print 'Processing file ' + file + ': ',
im = Image.open(file)
try:
im.histogram()
print 'Fine'
except IOError:
print 'Broken. Moving...'
dir, file_name = os.path.split(file)
file_name = os.path.split(dir)[1] + '_' + file_name
shutil.move(file, os.path.join(output_dir, file_name))
except KeyboardInterrupt:
print 'Exiting...'
sys.exit(1)
except:
print 'Unexpexted exception'
for root, dirs, files in os.walk(sys.argv[1]):
[check_file(os.path.join(root, f), sys.argv[2]) for f in files if f.endswith('.jpg')]
import os
import sys
import Image
import shutil
def check_file(file, output_dir):
print 'Processing file ' + file + ': ',
im = Image.open(file)
try:
im.histogram()
print 'Fine'
except IOError:
print 'Broken. Moving...'
dir, file_name = os.path.split(file)
file_name = os.path.split(dir)[1] + '_' + file_name
shutil.move(file, os.path.join(output_dir, file_name))
except KeyboardInterrupt:
print 'Exiting...'
sys.exit(1)
except:
print 'Unexpexted exception'
for root, dirs, files in os.walk(sys.argv[1]):
[check_file(os.path.join(root, f), sys.argv[2]) for f in files if f.endswith('.jpg')]
Комментариев нет:
Отправить комментарий