2010-07-20 74 views
2

我正在使用exif.py庫。致電python時間問題

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模型中?

回答

2

使用time.strptime()解析str()值,比時間元組格式化爲任何所需的形式。

一個示例,使用EXIF返回的'Image DateTime'屬性。

>>> 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' 
>>> 
0

它看起來像exif.py返回IFD_Tag的一個實例。你想要的值可能在t.values中。您還可以使用datetime.strptime()來解析從exif數據獲得的字符串。

1

Django最適合datetime對象。字符串可以轉換爲datetime,但是你不應該關注字符串。你應該專注於創建一個適當的對象。

選擇1.找出什麼樣的實際時間是exif時間。而不是type(t),做t.__class__看看它真的是什麼。另外,所以dir(t)看看它有什麼方法。它可能會創建一個適當的浮點值或time.struct_time值的方法。

Choice 2.使用datetime.datetime.strptime解析時間字符串以創建適當的datetime對象。閱讀:http://docs.python.org/library/datetime.html#datetime.datetime.strptime

0

假設標籤[ '圖像的DateTime'],如果存在的話,返回像 「2010:07:20十四時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())