Pregunta

Tengo un archivo que he leído desde que se parece a:

1   value1
2   value2
3   value3

El archivo puede o no tener un arrastre \ n en la última línea.

El código que estoy usando funciona muy bien, pero si hay un arrastre \ n falla.
¿Cuál es la mejor manera de atrapar a este?

Mi código de referencia:

r=open(sys.argv[1], 'r');
for line in r.readlines():
    ref=line.split();
    print ref[0], ref[1]

Lo que fallaría con un:
Rastreo (llamadas recientes más última):
  Archivo "./test", línea 14, en
    Imprimir ref [0], referencia [1] | IndexError: índice de la lista fuera de rango

¿Fue útil?

Solución

Se puede ignorar las líneas que sólo contienen espacios en blanco:

for line in r.readlines():
    line = line.rstrip()      # Remove trailing whitespace.
    if line:                  # Only process non-empty lines.
        ref = line.split();
        print ref[0], ref[1]

Otros consejos

No creo que nos haya contado toda la historia. line.split() dará el mismo resultado con independencia de si la última línea se termina por \n o no.

Tenga en cuenta que la última línea de un archivo que está siendo terminado por \n es el comportamiento habitual, y la gente está molesta de vez en cuando por una línea que no es tan terminado.

Si se va a hacer algo como:

print repr(line), repr(ref)

en lugar de

print ref[0], ref[1]

que sería capaz de detectar por sí mismo exactamente lo que está pasando, en vez de dejar que adivinar.

Si como @ Marcos Byers conjeturas, su última línea está vacío o se compone sólo de los espacios en blanco, puede ignorar esa línea (y todas las otras líneas) por este código algo más simple:

for line in r: # readlines is passe
    ref = line.split() # split() ignores trailing whitespace
    if ref:
        print ref[0], ref[1]

también considerar la posibilidad de que usted tiene sólo un campo, no es 0 o 2, en su última línea.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top