проблема времени питона - PullRequest
2 голосов
/ 20 июля 2010

Я использую библиотеку exif.py . После звонка

tags=exif.process_file(...)

Я хочу получить время, когда изображение было снято. так что я продолжаю с

t =tags['Image DateTime'] if tags.has_key('Image DateTime') else time.time()

теперь я хочу сохранить t в базе данных django. Поскольку это должно быть в форме 2010-07-20 14:37:12, но, очевидно, exif поставляет 2010: 07: 20 14:37:12 однако, когда я иду

type(t)

возвращает 'instance', а не float, который является результатом

type(time.time())

или 'str', который является типом строки. Как я могу разобрать значение, которое EXIF ​​дал мне, чтобы вставить его в модель django?

Ответы [ 4 ]

2 голосов
/ 20 июля 2010

Используйте time.strptime() для анализа значения str(), затем отформатируйте кортеж времени в любую желаемую форму.

Пример, использующий атрибут Image DateTime, возвращаемый EXIF.

>>> e1['Image DateTime']
(0x0132) ASCII=2007:09:06 06:37:51 @ 176
>>> str(e1['Image DateTime'])
'2007:09:06 06:37:51'
>>> 
>>> tag = time.strptime(str(e1['Image DateTime']),"%Y:%m:%d %H:%M:%S")
>>> tag
time.struct_time(tm_year=2007, tm_mon=9, tm_mday=6, tm_hour=6, tm_min=37, tm_sec=51,tm_wday=3, tm_yday=249, tm_isdst=-1)
>>> time.strftime("%Y-%m-%d %H:%M:%S", tag)
'2007-09-06 06:37:51'
>>> 
1 голос
/ 20 июля 2010

Django лучше всего работает с datetime объектами.Строки могут быть преобразованы в datetime, но вы не должны фокусироваться на строках.Вы должны сосредоточиться на создании правильного datetime объекта.

Вариант 1. Выясните, какой фактический класс имеет время exif.Вместо type(t) сделайте t.__class__, чтобы увидеть, что это на самом деле.Кроме того, dir(t), чтобы увидеть, какие методы у него есть.У него могут быть методы, которые создадут правильное значение с плавающей запятой или значение time.struct_time.

Вариант 2. Анализ строки времени с datetime.datetime.strptime для создания правильного datetime объекта.Читать это: http://docs.python.org/library/datetime.html#datetime.datetime.strptime

0 голосов
/ 20 июля 2010

Если предположить, что теги ['Image DateTime'], если они есть, возвращают строку типа "2010: 07: 20 14:37:12", тогда вы можете использовать:

if tags.has_key('Image DateTime'):
    t = tags['Image DateTime'].replace(':', '-' , 2)
else:
    t = time.strftime('%Y-%m-%d %H:%M:%S')

replace исправлениявременная строка из exif:

>>> '2010:07:20 14:37:12'.replace(':', '-', 2)
    '2010-07-20 14:37:12'

Если вы хотите использовать GMT вместо местного времени, используйте

time.strftime('%Y-%m-%d %H:%M:%S', time.gmtime())
0 голосов
/ 20 июля 2010

Похоже, exif.py возвращает экземпляр IFD_Tag.Значения, которые вы хотите, могут быть в t.values.Вы также можете использовать datetime.strptime () для разбора строки, полученной из данных exif.

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