Python CSV – índice de lista fuera de rango

Recibo este error al leer el archivo CSV (sin encabezados, 3 columnas, 2ª y 3ª cadenas):

Traceback (most recent call last): File "C:\Python32\fantasy.py", line 72, in module> some=row[1] IndexError: list index out of range* 

Aquí es parte del código de abajo. Es algo estúpidamente simple para ser atrapado, pero estoy en blanco sobre cómo no está funcionando. Soy nuevo en la encoding, pero he tratado con el módulo csv antes y nunca tuve problemas con esta parte, y solo hice un archivo de prueba csv en el bloc de notas para ver si se leerá desde el mismo código, y así es. No lo sé.

 import csv ##############some other code, working good and I believe not relevant to this problem file=open(r"C:\Users\me\Desktop\file-2.csv","r") reader=csv.reader(file, delimiter=',', quotechar='"') for row in reader: some=row[1] 

Intenta buscar líneas en blanco. Además, evite utilizar el file como nombre de variable. "r" es el modo por defecto con abierto.

 import csv with open(r"C:\Users\me\Desktop\file-2.csv") as f: reader = csv.reader(f, delimiter=',', quotechar='"') for row in reader: if row: some=row[1] 

Parece que tienes una línea vacía o algo así. Por defecto, cada iteración de su bucle for toma una línea de texto de su archivo csv. Esa fila de texto termina con un carácter de nueva línea. Entonces, si tiene una línea en blanco, entonces el lector la lee como algo como esto [].

Haz esto y verás lo que quiero decir:

 for row in reader: print(repr(row)) some = row[1] 

Encontrará que la última fila que se imprime no tiene una longitud de 2 o más.

Hay algunas cosas que puedes hacer para solucionar esto:

  1. Pase el archivo a través de un script de limpieza para eliminar las líneas en blanco
  2. Cambia el carácter de nueva línea reconocido cuando llamas al lector.

Esta pregunta es antigua, pero encontré una solución ligeramente diferente a este problema, así que la pondré aquí para cualquier persona que pueda tener este problema. Mi archivo era tan grande que no pude ver el final. Al final había una fila con solo 2 cosas en lugar de las típicas 5 de mi archivo, así que cuando intenté obtener la cuarta columna me estaba dando este error. Aquí estaba mi solución:

  for row in reader: if len(row) > 2: array.append(row[3]) 

También he tenido este error antes. Mi problema era estúpido y evitable sin embargo. Copié algo de código de otro progtwig y no cambié el delimitador (en mi caso, de canal a coma), así que, por supuesto, iba más allá de su índice buscando un canal cuando nunca existió.