Me sale este error al leer el archivo CSV (sin cabeceras, 3 columnas, la 2ª y la 3ª de las 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 de el código de abajo. Es estúpidamente simples cosas para ser pegado en, pero estoy en blanco acerca de cómo no funciona. Soy nuevo en la codificación, pero he tratado con csv módulo antes y nunca tuve problemas con esta parte, y de hecho algunos test csv archivo en el bloc de notas para ver si se va a leer desde el mismo código, y lo hace. No 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]
  • imprimir repr(fila) justo antes del error. Abrir con newline='' si no se podría incrustar saltos de línea en un campo
  • Lo siento, Sebastián, pero se me hace difícil de interpretar. Se podría escribir integral de los códigos de ella?
  • De todos modos, no sé si esto es importante, pero he usado shutil a hacer el mismo archivo que estoy tratando de leer.
  • Puede mostrar el contenido del archivo que está intentando leer? Una de las líneas debe ser demasiado corto.
  • Así, la primera columna es el número de caso. – 1,Arsenal,Mannone 2,Arsenal,Jenkinson y así sucesivamente
  • 1. Agregar una línea de print(repr(row)) antes de la some=row[1] línea en el código, copiar-pegar la última cosa que se imprime antes de ver la Rastreabilidad… 2. Consulte el primer ejemplo de código en la documentación sobre cómo usar newline=''
  • Usted puede tener un espacio en blanco o muy corta la línea en el archivo. De ahí, posiblemente, podría ser un extra carácter de nueva línea (línea en blanco) al final del archivo. Abra el archivo en un editor de texto y busque un divertido la línea.

InformationsquelleAutor morris | 2012-10-23

4 Comentarios

  1. 12

    Intente comprobar por líneas en blanco. También, evitar el uso de file como un nombre de variable. "r" es el modo por defecto con abrir.

    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]
    • No hay file, integrado en Python 3. Incluso en Python 2 file es una excepción a la regla y podría ser utilizado como un nombre de variable (se recomienda el uso de open() en lugar de file() y es muy buen nombre para ignorar).
  2. 3

    Esta pregunta es viejo, pero me encontré con algo un poco diferente solución a este problema, así que voy a poner aquí para que cualquier otra persona que tiene este problema. Mi archivo era tan grande que yo no podía ver el final de la misma. Al final había una fila con sólo 2 cosas en lugar de la típica 5 de mi archivo, así que cuando traté de conseguir la cuarta columna se me estaba dando este error. Aquí fue mi solución:

        for row in reader:
            if len(row) > 2:
                array.append(row[3])
    • Puede usted msd su respuesta.
    • Muchas gracias por tu respuesta ! Que len() es un protector de la vida.
  3. 2

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

    Hacer esto y usted verá lo que quiero decir:

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

    Usted encontrará que la última fila que se imprime no es de longitud de 2 o más.

    Hay algunas cosas que usted puede hacer para arreglar esto:

    1. Pasar el archivo a través de la limpieza de secuencia de comandos para quitar líneas en blanco
    2. cambiar el reconocido carácter de salto de línea cuando usted llame lector
  4. 0

    He tenido este error antes así. Mi problema era estúpido y evitable, aunque. He copiado el código de otro programa y no cambiar el delimitador (en mi caso de la tubería de coma), así que por supuesto que iba más allá del índice en busca de una tubería cuando uno nunca ha existido.

Dejar respuesta

Please enter your comment!
Please enter your name here