Comments 18
Отличная практика для начинающих.
Как практикум по языку — хорошо. Но подобная задача прекрасно решается групповым переименованием в Total Commander.
Благодарю.
Попробую сегодня на многолетнем архиве фотографий.
Попробую сегодня на многолетнем архиве фотографий.
Всё отлично, только дату лучше брать из Exif.Image.DateTime
from PIL import Image
def get_date_taken(path):
return Image.open(path)._getexif()[36867]
Интересная штука. Еще бы по не системным свойствам научиться раскладывать
мне кажется, что на нормальном шелле (bash/zsh и прочие) такое делается в пару строк
UFO just landed and posted this here
Ужас.
'/' заменить на os.path.sep
а ещё лучше прочитать про os.path.join()
А еще лучше — использовать pathlib.
Расширение файла это не всегда последние три символа, есть специальная функция для этого — os.path.splitext. Зачем нужно два прохода и пустые папки по месяцам — не ясно.
Стоит опубликовать исходники на GitHub :)
тут прямо есть что улучшать в коде…
из того что еще не упомянули заметил отсутствие lower() или upper() для расширения файла (сравнивать все желательно в одном регистре)
ну и os.chdir(p) — прям не нужно использовать, здесь проще сформировать путь куда сохранять и делать shutil.move
вместо функции d для папок месяцев правильнее формировать путь сохранения с использованием '{0:02d}'.format(x) где x — месяц от 1 до 12
Просто для такой задачи вся элегантность и простота питона не видна, все можно сделать сильно проще и короче
из того что еще не упомянули заметил отсутствие lower() или upper() для расширения файла (сравнивать все желательно в одном регистре)
ну и os.chdir(p) — прям не нужно использовать, здесь проще сформировать путь куда сохранять и делать shutil.move
вместо функции d для папок месяцев правильнее формировать путь сохранения с использованием '{0:02d}'.format(x) где x — месяц от 1 до 12
Просто для такой задачи вся элегантность и простота питона не видна, все можно сделать сильно проще и короче
Можно пойти дальше и использовать 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
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.
Как разложить фото, видео по папкам, исходя из их дат, используя python