2016-02-04 91 views
1

Python新手。試圖調用.split到單獨的時間值,以便我可以指望所有四月登陸日期:這裏是數據的模樣,如果我呼叫響應['數據]Python .split IndexError

[{u'email': u'[email protected]'}, {u'login_date': u'2014-05-04T04:09:29-07:00', u'email': u'[email protected]'}, {u'login_date': u'2014-04-13T20:37:31-04:00', u'email': u'[email protected]'}, {u'login_date': u'2014-05-11T15:34:17-04:00', u'email': u'[email protected]'}, {u'login_date': u'2014-04-13T17:12:20-04:00', u'email': u'[email protected]'}, {u'login_date': u'2014-04-01T02:22:55+05:00', u'email': u'[email protected]'}, {u'login_date': u'2014-04-22T21:04:03+04:00', u'email': u'[email protected]'}, {u'login_date': u'2014-05-08T22:30:57-04:00', u'email': u' [email protected]'}, {u'login_date': u'2014-04-25T13:27:48-08:00', u'email': u'[email protected]'}, {u'login_date': u'2014-04-14T02:18:48-07:00', u'email': u'[email protected]'}, {u'login_date': u'2014-04-20T11:02:21-10:00', u'email': u'[email protected]'}, {u'login_date': u'2014-04-27T11:08:50+10:00', u'email': u'[email protected]'}] 

等等等等.. 。當我運行此代碼:

loggedList = [user['login_date'] for user in response['data']] 
for login in loggedList: 
    if login is not None: 
    aprilList.append('-' + login.split('-')[0]) 


# print aprilList 
print response['data'] 

我在控制檯收到此打印輸出:

u'-2014', u'-2014', u'-2014', u'-2014', u'-2014', u'-2014', u'-2014', u'-2014', u'-2014', u'-2014', u'-2014', u'-2014', u'-2014', u'-2014', u'-2014', u'-', u'-2014', u'-2014', u'-2014', u'-2014', u'-2014', u'-2014', u'-2014', u'-2014', u'-2014', u'-2014', u'-2014', u'-2014', u'-2014', u'-2014'] 

但是當我試圖通過改變login.split('-')[0])到訪問.split列表的第二部分我得到一個IndexError列表超出範圍。

如何訪問登錄日期的月份部分?我認爲我很接近,它使用.split方法隱藏在某個地方。

回答

3

如果你看看通過你的輸出login.split('-')[0]),你會發現,一個是u'-',

這可能意味着你的數據條目的一個有一個空的登錄日期,所以login.split是給一個數組只是其中的空字符串。這有1元,所以第二個指標是出界的

要麼確保所有的數據格式是正確和完整的,或者只嘗試打印一個月如果login.split的結果是足夠長

+0

確定疑難雜症我看到它,有沒有一種快速的方法來通過數據規範化來敲掉這些數據? –

+1

@AdamWeitzman你可以在訪問元素之前檢查長度。如果len(login.split(' - '))== 2或類似的東西。 – sisanared

+0

@shravster可能> = 2。 – StephenTG

2

使用dateutil模塊執行此操作。

from dateutil import parser 
d = parser.parse("2014-04-13T20:37:31-04:00") 
print d.month 
+0

不錯!但我得到一個AttributeError:'NoneType'對象沒有屬性'讀'錯誤,當我嘗試並將日期作爲變量傳入 –

+0

O我的錯,我認爲這與登錄之一有關空白 –

2

添加驗證,如果login_date是在那裏在響應中的每個元素,我也建議解析您的datedatetime.datetime格式,所以你可以訪問所有的時間參數:

import dateutil.parser as dp 

for user in response['data']: 
    if user['login_date']: 
     print dp.parse((user['login_date'])).month 
+0

完美,謝謝! –