为什么这个'列表索引超出范围'正在发生?

时间:2015-04-18 20:38:07

标签: python

所以我有一个csv文件,我正在用Python阅读,这是第一个属性的格式:'2011-01-01 00:00:00'即它是一个字符串,它有日期和时间戳,分开空间。当我在此代码上致电split()时,我会返回['2011-01-01', '00:00:00'],其中非常清楚size = 2的列表。

这是我正在使用的代码:

for line in train_data:
    datetime = line[0]    # get first attribute of line
    datetime_array = datetime.split(' ')    # split on space
    print datetime_array[0]

上面的代码工作正常,只打印出日期,格式为2011-01-01

但是,如果我想获取时间字符串,我将代码更改为:

for line in train_data:
    datetime = line[0]    # get first attribute of line
    datetime_array = datetime.split(' ')    # split on space
    print datetime_array[1]    # changed index from 0 to 1

我使用上面的代码抛出了IndexError: list index out of range错误。

有趣的是,如果我这样做:

for line in train_data:
    datetime = line[0]
    datetime_array = datetime.split(' ')
    size = len(datetime_array)    # size = 2
    print datetime_array[size - 1]    # size - 1 = 1

输出是预期的,所以我得到00:00:00

有人能告诉我为什么会这样吗?为什么在明确指定索引时会出现错误?

2 个答案:

答案 0 :(得分:1)

假设日期和小时之间有空格,您的代码就可以了。

问题是 - 某处没有。

要找出使用它的地点和原因:

line_number = 1
for line in train_data:
    datetime = line[0]    # get first attribute of line
    datetime_array = datetime.split(' ')    # split on space
    if len(datetime_array) < 2:
        print "The following line does not conform to expected format:"
        print line
        print "line number: %d" % line_number
    line_number += 1

这将打印所有不符合您期望格式的行。

答案 1 :(得分:0)

我明白了。 我是个白痴。它抛出了IndexError: list index out of range错误,因为我的csv文件的第一行包含属性名称,在本例中为datetime。当然,这意味着列表只有['datetime'],其中包含size = 1