2

我正在使用exif.py库。打电话后

tags=exif.process_file(...)

我想检索图像被捕获的时间。所以我继续

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

现在我想将 t 存储在 django 的数据库中。为此 t 必须采用 2010-07-20 14:37:12 的形式,但显然 exif 提供 2010:07:20 14:37:12 但是当我去的时候

type(t)

它返回“实例”而不是浮点数,后者是

type(time.time())

或“str”,它是字符串的类型。如何解析 EXIF 给我的值以将其填充到 django 模型中?

4

4 回答 4

2

用于time.strptime()解析str()值,而不是将时间元组格式化为任何所需的形式。

使用 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'
>>> 
于 2010-07-20T13:13:35.207 回答
1

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

于 2010-07-20T13:04:47.417 回答
0

看起来 exif.py 返回了一个 IFD_Tag 的实例。您想要的值可能在 t.values 中。您还可以使用 datetime.strptime() 来解析从 exif 数据中获得的字符串。

于 2010-07-20T13:03:20.260 回答
0

假设 tags['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())
于 2010-07-20T13:24:44.727 回答