Python: So überprüfen Sie, ob eine Zeile eine leere Zeile ist

84

Ich versuche herauszufinden, wie man einen if-Zyklus schreibt, um zu überprüfen, ob eine Zeile leer ist.

Die Datei enthält viele Zeichenfolgen, und eine davon ist eine leere Zeile, die von den anderen Anweisungen getrennt werden soll (nicht a ""; ist ein Wagenrücklauf, gefolgt von einem anderen Wagenrücklauf, glaube ich).

new statement
asdasdasd
asdasdasdasd

new statement
asdasdasdasd
asdasdasdasd

Gibt es eine Möglichkeit zu überprüfen, ob eine Zeile leer ist, da ich das Dateieingabemodul verwende?

Mit diesem Code scheint es zu funktionieren, danke an alle!

for line in x:

    if line == '\n':
        print "found an end of line"

x.close()
user1006198
quelle

Antworten:

125

Wenn Sie Zeilen mit nur Leerzeichen ignorieren möchten:

if not line.strip():
    ... do something

Die leere Zeichenfolge ist ein falscher Wert.

Oder wenn Sie wirklich nur leere Zeilen wollen:

if line in ['\n', '\r\n']:
    ... do  something
retracile
quelle
Der zweite macht das, was ich mir vorgestellt habe. Danke! if Zeile in ['\ n']:
user1006198
1
Wenn Sie nur verwenden if line in ['\n'], sollten Sie dies durch ersetzen if line == '\n'.
Andrew Clark
6
Ich möchte darauf hinweisen, dass die akzeptierte Antwort einen Fehler enthält: if line.strip (): ... #do etwas ignoriert Zeilen mit Leerzeichen, dh Leerzeichen, Tabulatoren und leere Zeilen. Deshalb hat nur das zweite für das Originalplakat funktioniert: Das "Nicht" muss entfernt werden.
Niefpaarschoenen
3
wenn nicht line.strip (): ... etwas tun. Sollte es nicht stattdessen weitergehen? denn wenn nicht, bedeutet line.strip () tatsächlich, dass die Zeile leer ist, sodass nichts daraus entfernt werden kann, also ignorieren oder fortfahren. Der erste Teil nicht line.strip () fängt alle leeren Zeilen
Dhiwakar Ravikumar
1
Wäre es sauberer zu verwenden os.linesepals ['\n', '\r\n']?
Shawn
23

Ich benutze den folgenden Code, um die leere Zeile mit oder ohne Leerzeichen zu testen.

if len(line.strip()) == 0 :
    # do something with empty line
bevardgisuser
quelle
11
line.strip() == ''

Oder wenn Sie Zeilen, die aus Leerzeichen bestehen, nicht "auffressen" möchten:

line in ('\n', '\r\n')
Fred Foo
quelle
1
Im zweiten Beispiel möchten Sie wahrscheinlich auch prüfen, ob \r\nWindows- ähnliche Zeilenenden (CRLF) berücksichtigt werden
poplitea
Ich habe vergessen zu erwähnen, dass dies auf einem Unix-Computer ausgeführt wird, daher wird die Newline ohne \ r verwendet. Ich habe es versucht, aber es hat nicht funktioniert, was für mich funktioniert: if Zeile in ['\ n']: (keine Ahnung, warum die Zeile == "\ n" nicht funktioniert)
user1006198
1
@ user1006198: Wenn Sie nur nach suchen \n, line == '\n'ist es besser. Sie sollten es wahrscheinlich noch einmal versuchen und herausfinden, was Ihr Problem war.
Retracile
@ user1006198: (1) Wenn Sie eine von Windows erstellte Textdatei unter Unix lesen, erhalten Sie, \r\nwenn Sie nicht verwenden. mode='rU'(2) Erhalten Sie einen Hinweis: print repr(line)Wenn dies keinen Hinweis liefert, teilen Sie uns genau mit, was "nicht funktioniert". bedeutet für dich.
John Machin
Die einzige Erklärung, die ich habe, ist, dass wahrscheinlich die Dateieingabe etwas mit jeder Zeile macht, denn wenn ich die Zeile mit dem == vergleiche, treffe ich die Anweisung nicht (drucke eine Zeichenfolge, um zu sehen, ob ich die leere Zeile treffe und mit dem == druckt es niemals die Debug-Zeile, während es dies tut, wenn ich die "if-Zeile in" verwende).
user1006198
2

Sie sollten Textdateien mit öffnen, rUdamit Zeilenumbrüche ordnungsgemäß transformiert werden (siehe http://docs.python.org/library/functions.html#open) . Auf diese Weise müssen Sie nicht nachsehen \r\n.

hochl
quelle
versuchte das Öffnen, aber ich finde die Dateieingabe besser für meinen Fall geeignet
user1006198
3
Es sollte auch beachtet werden, dass das UArgument in Python3 nicht unterstützt wird.
Jtwilson
1

Ich denke, es ist robuster, reguläre Ausdrücke zu verwenden:

import re

for i, line in enumerate(content):
    print line if not (re.match('\r?\n', line)) else pass

Dies würde in Windows / Unix übereinstimmen. Wenn Sie sich nicht sicher sind, ob Zeilen nur Leerzeichen enthalten, können Sie sie auch '\s*\r?\n'als Ausdruck verwenden

Alemol
quelle