Pull to refresh

Comments 18

Как практикум по языку — хорошо. Но подобная задача прекрасно решается групповым переименованием в Total Commander.
Благодарю.
Попробую сегодня на многолетнем архиве фотографий.
Всё отлично, только дату лучше брать из Exif.Image.DateTime

from PIL import Image
def get_date_taken(path):
    return Image.open(path)._getexif()[36867]
Интересная штука. Еще бы по не системным свойствам научиться раскладывать
Если Вы про раскладывание по тому что изображено на снимках, то Вам в сторону TensorFlow надо смотреть.
мне кажется, что на нормальном шелле (bash/zsh и прочие) такое делается в пару строк
UFO just landed and posted this here
С небольшими изменениями должно поехать и на Linux.

Ужас.
'/' заменить на os.path.sep
а ещё лучше прочитать про os.path.join()

Расширение файла это не всегда последние три символа, есть специальная функция для этого — os.path.splitext. Зачем нужно два прохода и пустые папки по месяцам — не ясно.

тут прямо есть что улучшать в коде…
из того что еще не упомянули заметил отсутствие lower() или upper() для расширения файла (сравнивать все желательно в одном регистре)
ну и os.chdir(p) — прям не нужно использовать, здесь проще сформировать путь куда сохранять и делать shutil.move
вместо функции d для папок месяцев правильнее формировать путь сохранения с использованием '{0:02d}'.format(x) где x — месяц от 1 до 12

Просто для такой задачи вся элегантность и простота питона не видна, все можно сделать сильно проще и короче

Благодарю. Код не идеален бесспорно. Всего лишь лопатка для разгребания )
так разгребать красиво можно
for i in range(1, 13):
    ... if os.path.exists(f'{i:02}') else os.makedirs(f'{i:02}')

Можно пойти дальше и использовать EXIF метаданные для определения даты снимка. Время модификации файлов иногда не соответствуют времени снимка.

#!/bin/sh

for i in 'tv-shots0' 'tv-shots1' 'tv-shots2' 'tv-shots3'
do
echo $i

cd /tank/CAMERAS/$i

find. -name "*.png" -print |
ls -lUrD %Y-%m-%d_%H:%M:%S $line |
while read line
do
echo $line
namefile=`echo "$line" | awk '{ print $7 }'`
myvar=`echo "$line" | awk '{ print $6 }'`
yearfile=`echo | awk '{ print substr("'"${myvar}"'",1,4)}'`
mounthfile=`echo | awk '{ print substr("'"${myvar}"'",6,2)}'`
dayfile=`echo | awk '{ print substr("'"${myvar}"'",9,2)}'`
echo namefile $namefile
echo yearfile $yearfile
echo mounthfile $mounthfile
echo dayfile $dayfile
if [! -f /tank/CAMERAS/$i.arch/$yearfile/$mounthfile/$dayfile ]; then
mkdir -p /tank/CAMERAS/$i.arch/$yearfile/$mounthfile/$dayfile
fi
mv $namefile /tank/CAMERAS/$i.arch/$yearfile/$mounthfile/$dayfile/
done

done
Sign up to leave a comment.

Articles