Ignora ultima \ n quando si utilizza readlines con python
Domanda
Ho un file che ho letto da che assomiglia:
1 value1
2 value2
3 value3
Il file può o non può avere un finale \ n nell'ultima riga.
Il codice che sto utilizzando grandi opere, ma se c'è un finale \ n fallisce.
Che cosa è il modo migliore per prendere questo?
Il mio codice di riferimento:
r=open(sys.argv[1], 'r');
for line in r.readlines():
ref=line.split();
print ref[0], ref[1]
Quali fallirebbe con un:
Traceback (chiamata più recente scorso):
File "./test", la linea 14, in
stampa ref [0], ref [1]
IndexError: indice di lista fuori intervallo
Soluzione
È possibile ignorare le righe che contengono solo spazi bianchi:
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]
Altri suggerimenti
Non credo che ci avete raccontato tutta la storia. line.split()
darà lo stesso risultato indipendentemente dal fatto che l'ultima riga è terminato da \n
o meno.
Si noti che l'ultima riga in un file che viene risolto da \n
è il comportamento del solito, e le persone sono di tanto in tanto infastidito da una linea che non è così terminato.
Se si dovesse fare qualcosa di simile:
print repr(line), repr(ref)
anziché
print ref[0], ref[1]
si sarebbe in grado di rilevare da soli esattamente cosa sta succedendo, invece di lasciandoci intuire.
Se come @ Mark Byers congetture, la tua ultima riga è vuota o costituito solo da spazi bianchi, è possibile ignorare che la linea (e tutti gli altri tali linee) per questo un po 'più semplice codice:
for line in r: # readlines is passe
ref = line.split() # split() ignores trailing whitespace
if ref:
print ref[0], ref[1]
Si prega di considerare anche la possibilità che si ha un solo campo, non 0 o 2, nella tua ultima riga.