Русский
Русский
English
Статистика
Реклама

Как разложить фото, видео по папкам, исходя из их дат, используя python


Всем знакомы завалы из фото и видео, кои покоятся годами после копирования с устройств. Особенно это характерно для iphone,ipad, которые при прямом копировании (без itunes) создают
залежи медиаконтента. Как это все разложить по годам-месяцам?
Да, есть синхронизация, да, можно сразу все сортировать. Но
Кто-то предпочитает ничего не трогать, так как соблюдается единство свалки, кто-то делает робкие попытки разложить все накопленное хотя бы по годам.

Бесспорно, через проводник, используя табличный вид, вручную не составит труда все это это раскидать, но начинаешь смотреть старые фото, и процесс затягивается.
Поэтому напишем простую программу, которая разложит файлы в папке по годам с месяцами в них:



Программа сама будет определять дату, заглядывая в дату изменения файла:



Почему используем дату изменения, а не дату создания файла?
Как правило, она более корректно указывает на дату файла, чем ее тезка.

Импорт модулей на старте:
import os,timeimport datetimeimport shutil


Предложим пользователю скопировать путь (windows) к папке с файлами:
p=input('Скопируйте сюда путь к фото. Например: E:/\1')os.chdir(p)


Введем функцию создания папок с месяцами от 01 до 12 (да простят мне отсутствие f' строк):
#создаем папки месяцев от 01 до 12def d():    for x in range (1,13):        if x>9:            if not os.path.exists(str(x)):                os.makedirs(str(x))        else:            if not os.path.exists('0'+str(x)):                os.makedirs('0'+str(x))


Следующая функция обработает дату, полученную с фото/видео файла:
def mod_date(file):    t = os.path.getmtime(file)    return datetime.datetime.fromtimestamp(t)


Теперь, пройдясь по папке, программа соберет все расширения файлов, а заодно,
определит какой год у файла. Для каждого года будет создана своя папка, а в ней,
в свою очередь, будут созданы папки с месяцами:
a=[] #['AAE', 'MOV', 'JPG', 'PNG']for root, dirs, files in os.walk(p):        for file in files:        if file[-3:] not in a:            a.append(file[-3:])        if file[-3:] in a:            year=str(mod_date(file))[:10][:4]                        if not os.path.exists(year):                os.makedirs(year)            os.chdir(p+'/'+year)                        d()            os.chdir(p)

*Таким образом можно раскидать по папкам файлы с совершенно разными (любыми) расширениями, а не только jpeg,mov,mkv.

Еще раз пройдемся по папке со свалкой фото, теперь уже перенося фото в соответствующие, вновь созданные папки:
try:    for root, dirs, files in os.walk(p):            for file in files:                if file[-3:] in a:                    year=str(mod_date(file))[:10][:4]                                        month=str(mod_date(file))[:10][5:7] #месяц создания фото                    shutil.move(file, year+'/'+month+'/'+file) #перенос файла в папкуexcept EnvironmentError:    ('Вроде готово')


Так как программа завершается с ошибкой, в цикле не найдя последнего файла, что не влияет на ее корректное выполнение, используется костыль из try,except, который притупляет бдительность впечатлительных особ, получающих красноту в консоль.

ps. Пост не претендует на научность, но, возможно, кому-то поможет победить свалки фото/видео.

Программа скачать.
Источник: habr.com
К списку статей
Опубликовано: 01.10.2020 10:13:11
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Python

Обработка изображений

Программирование

Работа с изображениями

Сортировка

Работа с видео

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru