【问题标题】:IndexError: list index out of range pythonIndexError:列表索引超出范围python
【发布时间】:2014-10-15 01:25:05
【问题描述】:

我确定这一定是一个愚蠢的错误,但我尝试过但无法自己解决。 我有一个格式为 id,name,date*time,terminal,status 的 CSV 文件。我正在尝试创建一个字典列表(registros),其中 key:value 是 csv 的每个字段。 我使用.split(',') 这样做,还使用.split('*') 作为日期*时间字段(fechaHora),因为我需要它们在不同的变量中。一切正常,直到我尝试访问时间 (fechaHora[1]),它给了我 IndexError。如果我打印整个列表,我可以看到 .split('*') 如何完美工作,如果我打印出长度 print(len(fechaHora)) 我得到它(len=2),所以不知道我的错误在哪里是。 将示例代码放在下面,感谢任何帮助。

"""Registros en archivo son de la forma
1,,Monday0901*085345,1,I"""
archivoOriginal = open('registros.csv', 'r')
registros = []
for linea in archivoOriginal:
    categorias = linea.split(',')
    idEmpl = categorias[0]
    nombre = categorias[1]
    fechaHora  = categorias[2].split('*')
    fecha = fechaHora[0]
    hora = fechaHora[1] #:::this line gives me the error!!
    terminal = categorias[3]
    estado  = categorias[4]
    #registros.append({"id":idEmpl, "fecha":fecha, "hora":hora, "estado":estado})
    registros.append({"id":idEmpl, "fecha":fechaHora, "estado":estado})
print (registros)
archivoOriginal.close()

这是我打印出 registros 时的一些输出,如您所见,fecha(fechaHora) 是一个包含两个项目的列表

{'fecha': ['Monday0901', '132215'], 'id': '1', 'estado': '0\n'}, {'fecha': ['Monday0901', '132330'], 'id': '2', 'estado': '0\n'}, {'fecha': ['Monday0901', '135328'], 'id': '2', 'estado': '0\n'},

我正在使用 python 3.4.1

【问题讨论】:

  • 您的其中一行肯定不包含第三列中的*?如果您在循环顶部打印该行,然后为我们粘贴它在(就在之前)失败时打印的行,将会有所帮助。
  • try: hora = fechaHora[1]exceptIndexError: print(fechaHora, len(fechaHora), line, sep='\n')
  • 正如我们在西班牙语中所说的“el que sabe, sabe”(知道的人,肯定知道)。我的 .csv 文档的第三个字段的标题没有*,感谢@JohnZwinck 的评论!为了测试目的,我只是将标题从Fecha/Hora 更改为Fecha*Hora。 PS:不知道如何将问题标记为已回答

标签: csv python-3.x


【解决方案1】:

替换

for linea in archivoOriginal:

for N, linea in enumerate(archivoOriginal):

使用python -i filename 运行您的文件,或在空闲编辑器中打开并按 F5。回溯后会有互动提示>>>。输入print(N, linea) 可查看您有问题的号码和行。

【讨论】: