2046 Stimmen

Wie entferne ich einen nachgestellten Zeilenumbruch?

Wie entferne ich das letzte Zeichen einer Zeichenkette, wenn es ein Zeilenumbruch ist?

"abc\n"  -->  "abc"

4 Stimmen

Superset: beliebige Zeichenkette anstelle von nur newline: stackoverflow.com/questions/1038824/

9 Stimmen

Die A+-Antwort lautet, wenn dies darauf zurückzuführen ist, dass vergessen wurde open() eine Datei mit dem entsprechenden 'newline=...' Parameter für Ihre Plattform (universelle Unterstützung von Zeilenumbrüchen), müssen Sie ihn möglicherweise nicht explizit entfernen.

2290voto

Rich Bradshaw Punkte 69394

Versuchen Sie die Methode rstrip() (siehe Dokument Python 2 et Python 3 )

>>> 'test string\n'.rstrip()
'test string'

Pythons rstrip() Methodenstreifen todo Arten von Leerzeichen am Ende, nicht nur einen Zeilenumbruch wie bei Perl mit chomp .

>>> 'test string \n \r\n\n\r \n\n'.rstrip()
'test string'

Um nur Zeilenumbrüche zu entfernen:

>>> 'test string \n \r\n\n\r \n\n'.rstrip('\n')
'test string \n \r\n\n\r '

Zusätzlich zu rstrip() gibt es auch die Methoden strip() et lstrip() . Hier ist ein Beispiel mit den dreien:

>>> s = "   \n\r\n  \n  abc   def \n\r\n  \n  "
>>> s.strip()
'abc   def'
>>> s.lstrip()
'abc   def \n\r\n  \n  '
>>> s.rstrip()
'   \n\r\n  \n  abc   def'

25 Stimmen

Ich bin kein Python-Kenner, daher habe ich keine Antwort darauf, aber Perls chomp() entfernt tatsächlich den Eingabesatztrenner am Ende. Das ist unter Unix ein Zeilenumbruch, kann aber auch anders sein (z.B. unter Windows) und ist veränderbar. Gibt es eine Möglichkeit, diesen Wert nur einmal vom Ende eines Strings zu entfernen?

5 Stimmen

Brian d foy: Python verfügt nicht über ein Eingabesatztrennzeichen wie awk und Perl.

4 Stimmen

Ist \n ausreichend? >>> "Prüfzeichenfolge \r\n ".rstrip(" \n ") 'Prüfzeichenfolge \r '

186voto

Ryan Ginstrom Punkte 13547

Und ich würde sagen, der "pythonische" Weg, um Zeilen ohne abschließende Zeilenumbruchzeichen zu erhalten, ist splitlines().

>>> text = "line 1\nline 2\r\nline 3\nline 4"
>>> text.splitlines()
['line 1', 'line 2', 'line 3', 'line 4']

8 Stimmen

0 Stimmen

Dies führt auch zu unerwarteten Ergebnissen, wenn Sie eine mehrzeilige Zeichenkette haben und nur die letzte Zeile entfernen wollen - Terminator.... (obwohl es dafür wahrscheinlich wieder zurückgefügt werden kann)

0 Stimmen

@GertvandenBerg die Methode heißt splitlines() . Wenn ich ihm einen multi- Zeile string, erwarte ich nicht, dass es nur die letzte Zeile entfernt, denn ich habe ihm wortwörtlich gesagt, dass es meinen mehrzeiligen String an den Zeilenumbrüchen in mehrere Strings aufteilen soll ;) Das Entfernen von Zeilenenden aus einer einzeiligen Zeichenkette ist eigentlich nur ein nützlicher Eckfall.

171voto

Mike Punkte 3523

Die kanonische Methode zum Entfernen von Zeilenende-Zeichen (EOL) ist die Verwendung der String-Methode rstrip(), die alle nachgestellten Zeichen entfernt \r o \n. Hier finden Sie Beispiele für Mac-, Windows- und Unix-EOL-Zeichen.

>>> 'Mac EOL\r'.rstrip('\r\n')
'Mac EOL'
>>> 'Windows EOL\r\n'.rstrip('\r\n')
'Windows EOL'
>>> 'Unix EOL\n'.rstrip('\r\n')
'Unix EOL'

Mit ' \r\n ' als Parameter für rstrip bedeutet, dass alle nachgestellten Kombinationen von ' \r ' oder ' \n '. Deshalb funktioniert es in allen drei oben genannten Fällen.

Diese Nuance ist in seltenen Fällen von Bedeutung. Ich musste zum Beispiel einmal eine Textdatei verarbeiten, die eine HL7-Nachricht enthielt. Der HL7-Standard verlangt ein nachgestelltes ' \r ' als sein EOL-Zeichen. Der Windows-Rechner, auf dem ich diese Nachricht verwendet habe, hatte sein eigenes ' \r\n ' EOL-Zeichen. Daher sah das Ende jeder Zeile wie ' \r\r\n '. Mit rstrip(') \r\n ') hätte die gesamte \r\r\n ', was nicht das ist, was ich wollte. In diesem Fall habe ich stattdessen einfach die letzten beiden Zeichen abgeschnitten.

Beachten Sie, dass im Gegensatz zu Perl's chomp Funktion werden alle angegebenen Zeichen am Ende der Zeichenkette entfernt, nicht nur eines:

>>> "Hello\n\n\n".rstrip("\n")
"Hello"

7 Stimmen

Beachten Sie, dass moderne Mac OS X-Anwendungen die \n. Nur alte Carbon-Anwendungen, die ursprünglich für Mac OS geschrieben wurden, verwenden \r.

2 Stimmen

Danke für die Klarstellung. Natürlich ist das rstrip(') \r\n ') funktioniert auch in diesem Fall.

14 Stimmen

Außerdem gibt es os.linesep die die EOL-Sequenz für das aktuelle Betriebssystem enthält.

102voto

Beachten Sie, dass rstrip nicht genau wie Perls chomp() funktioniert, da es die Zeichenkette nicht verändert. Das heißt, in Perl:

$x="a\n";

chomp $x

führt zu $x unter "a" .

sondern in Python:

x="a\n"

x.rstrip()

bedeutet, dass der Wert von x es immer noch "a\n" . Sogar x=x.rstrip() ergibt nicht immer das gleiche Ergebnis, da es alle Leerzeichen am Ende der Zeichenkette entfernt, nicht nur höchstens einen Zeilenumbruch.

9 Stimmen

Außerdem werden mit strip() wiederholte Zeichen entfernt, während mit chop/chomp nur ein Zeilenumbruch entfernt wird.

55voto

Jamie Punkte 543

Ich könnte etwas in der Art verwenden:

import os
s = s.rstrip(os.linesep)

Ich denke, das Problem mit rstrip("\n") ist, dass Sie wahrscheinlich sicherstellen wollen, dass der Leitungstrenner tragbar ist. (Einige veraltete Systeme verwenden Gerüchten zufolge "\r\n" ). Das andere Problem ist, dass rstrip werden wiederholte Leerzeichen entfernt. Hoffentlich os.linesep enthält die richtigen Zeichen. Bei mir funktioniert das.

13 Stimmen

Dies wird jedoch nicht funktionieren, wenn Sie versuchen, vom Benutzer eingereichte Inhalte in einer Webanwendung zu bereinigen. Der Benutzerinhalt kann aus einer beliebigen Quelle stammen und beliebige Zeilenumbrüche enthalten.

2 Stimmen

Das ist ein guter Punkt, außer dass Sie möglicherweise "fremde" Dateien (von veralteten Systemen) auf Ihrem modernen Betriebssystem verarbeiten.

1 Stimmen

Denken Sie auch daran, dass dies auf einem Windows-System nicht funktionieren wird, wenn Sie eine Datei im Textmodus lesen, da das nachgestellte Zeichen immer in ' \n '.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X