Frage

Ich habe eine Datei, die ich aus, das aussieht lesen wie:

1   value1
2   value2
3   value3

Die Datei kann oder auch nicht ein abschließendes hat \ n in der letzten Zeile.

Der Code Ich verwende funktioniert gut, aber wenn es ein nachlauf ist \ n es funktioniert nicht.
Was ist der beste Weg, dies zu fangen?

Mein Code als Referenz:

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

, die mit einem fehlschlagen würde:
Traceback (jüngste Aufforderung zuletzt):
  File "./test", Zeile 14, in
    Druck ref [0], ref [1]
Indexerror: Listenindex außerhalb des zulässigen Bereichs

War es hilfreich?

Lösung

Sie können Zeilen ignorieren, die nur enthalten Leerzeichen:

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]

Andere Tipps

Ich glaube nicht, dass Sie uns die ganze Geschichte erzählt. line.split() das gleiche Ergebnis, unabhängig von dem, ob die letzte Zeile von \n beendet ist oder nicht.

Beachten Sie, dass die letzte Zeile in einer Datei von \n beendet wird, ist das übliche Verhalten, und Menschen, die von einer Linie gelegentlich gestört werden, das nicht so beendet wird.

Wenn Sie sind, wie etwas zu tun:

print repr(line), repr(ref)

statt

print ref[0], ref[1]

Sie wäre in der Lage für sich selbst genau zu erkennen, was los ist, anstatt uns zu verlassen, zu erraten.

Wenn als @ Mark Byers mutmaßt, Ihre letzte Zeile leer ist oder besteht nur aus Leerzeichen, können Sie diese Zeile ignorieren (und alle andere derartige Linien) durch diesen etwas einfachen Code:

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

Bitte beachten Sie auch die Möglichkeit, dass Sie nur ein Feld haben, nicht 0 oder 2, in der letzten Zeile.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top