Дата и переименование файла Python - запрос на критику - PullRequest
6 голосов
/ 21 июля 2011

Сценарий: когда я фотографирую объект, я делаю несколько изображений с нескольких точек зрения. Умноженная на количество объектов, которые я «снимаю», я могу генерировать большое количество изображений. Проблема: Камера генерирует изображения, обозначенные как «DSCN100001», «DSCN100002» и т. Д. Загадочные.

Я собрал скрипт, который будет запрашивать указание каталога (Windows), а также «Префикс». Сценарий считывает дату и время создания файла и соответственно переименовывает файл. Префикс будет добавлен в начале имени файла. Таким образом, «DSCN100002.jpg» может стать «FatMonkey 20110721 17:51:02». Детали времени важны для меня для хронологии.

Сценарий следующий. Пожалуйста, скажите мне, является ли это Pythonic, написано это плохо или нет, и, конечно, есть ли более чистый - более эффективный способ сделать это. Спасибо.

   import os
   import datetime
   target = raw_input('Enter full directory path: ')
   prefix = raw_input('Enter prefix: ')
   os.chdir(target)
   allfiles = os.listdir(target)
   for filename in allfiles:
        t = os.path.getmtime(filename)
        v = datetime.datetime.fromtimestamp(t)
        x = v.strftime('%Y%m%d-%H%M%S')
        os.rename(filename, prefix + x +".jpg")

Ответы [ 3 ]

7 голосов
/ 21 июля 2011

То, как ты это делаешь, выглядит Pythonic. Несколько альтернатив (не обязательно предложений):

Вы можете пропустить os.chdir(target) и сделать os.path.join(target, filename) в цикле.

Вы можете сделать strftime('{0}-%Y-%m-%d-%H:%M:%S.jpg'.format(prefix)), чтобы избежать конкатенации строк. Это единственный, который я рекомендую.

Вы можете повторно использовать имя переменной, например temp_date вместо t, v и x. Это было бы хорошо.

Вы можете пропустить сохранение временных переменных и просто сделать:

for filename in os.listdir(target):
    os.rename(filename, datetime.fromtimestamp(
                         os.path.getmtime(filename)).strftime(
                          '{0}-%Y-%m-%d-%H:%M:%S.jpeg'.format(prefix)))

Вы можете обобщить свою функцию для работы с рекурсивными каталогами, используя os.walk().

Вы можете определить расширение файлов, чтобы оно было правильным не только для .jpeg с.

Вы можете убедиться, что переименованы только файлы вида DSCN1#####.jpeg

3 голосов
/ 21 июля 2011

Ваш код приятен и прост.Несколько возможных улучшений, которые я могу предложить:

  1. Аргументы командной строки более предпочтительны для имен директорий из-за автозаполнения с помощью TAB
  2. EXIF ​​является более точным источником даты ивремя создания фото.Если вы измените фотографию в редакторе изображений, modify time будет изменено, а информация EXIF ​​будет сохранена.Вот обсуждение библиотеки EXIF ​​для Python: Библиотека манипуляций Exif для Python
2 голосов
/ 21 июля 2011

Я думал только о том, что если вы собираетесь, чтобы компьютер выполнял работу за вас, позвольте ему выполнять больше работы.Я предполагаю, что вы собираетесь снимать один объект несколько раз, а затем либо перейти к другому объекту, либо переместить другой объект на место.Если это так, вы можете сгруппировать фотографии по тому, как близко расположены временные метки (возможно, любая дельта в течение 2 минут считается новым объектом).Затем, основываясь на этих псевдокластерах, вы можете назвать фотографии по объектам.

Может быть не то, что вы ищете, но подумал, что я добавлю в предложение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...