Python .split IndexError

时间:2016-02-04 20:14:55

标签: python list python-2.7 date python-2.x

Python新手。试图调用.split来分隔时间值,这样我就可以计算4月的所有登录日期:如果我调用响应['数据]

,这就是数据的样子
[{u'email': u'wilderman.nyree@heidenreich.com'}, {u'login_date': u'2014-05-04T04:09:29-07:00', u'email': u'vrippin@gmail.com'}, {u'login_date': u'2014-04-13T20:37:31-04:00', u'email': u'eileen.gusikowski@oreilly.info'}, {u'login_date': u'2014-05-11T15:34:17-04:00', u'email': u'cstehr@keebler.com'}, {u'login_date': u'2014-04-13T17:12:20-04:00', u'email': u'onolan@gmail.com'}, {u'login_date': u'2014-04-01T02:22:55+05:00', u'email': u'ygoyette@yahoo.com'}, {u'login_date': u'2014-04-22T21:04:03+04:00', u'email': u'vblanda@gmail.com'}, {u'login_date': u'2014-05-08T22:30:57-04:00', u'email': u' ybartoletti@littel.biz'}, {u'login_date': u'2014-04-25T13:27:48-08:00', u'email': u'woodie.crooks@kozey.com'}, {u'login_date': u'2014-04-14T02:18:48-07:00', u'email': u'emilia16@block.com'}, {u'login_date': u'2014-04-20T11:02:21-10:00', u'email': u'bahringer.karl@yahoo.com'}, {u'login_date': u'2014-04-27T11:08:50+10:00', u'email': u'morissette.lalla@kuhicmuller.com'}]

等等......当我运行这段代码时:

 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])更改为login.split('-')[1])来访问.split列表的第二部分时,我得到的IndexError列表超出了范围。

如何访问登录日期的月份部分?我想我已经接近了,并且用.split方法隐藏了某个地方。

3 个答案:

答案 0 :(得分:3)

如果您查看login.split('-')[0])的输出,则会注意到u'-',

这可能意味着您的某个数据条目的登录日期为空,因此login.split会给出一个只包含空字符串的数组。这有1个元素,所以第二个索引超出范围

确保所有数据的格式正确并完整,或者只有在login.split的结果足够长时才尝试打印月份

答案 1 :(得分:2)

使用dateutil模块执行此操作。

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

答案 2 :(得分:2)

如果响应中的每个元素都有login_date,请添加验证,我还建议您将date解析为datetime.datetime格式,以便您可以访问所有时间参数:< / p>

import dateutil.parser as dp

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