Ignorar el pasado \ n cuando se utiliza con el pitón readlines
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
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.