Wie kann ich einen abschließenden Zeilenumbruch entfernen?

Lesezeit: 7 Minuten

Wie kann ich das letzte Zeichen einer Zeichenfolge entfernen, wenn es sich um einen Zeilenumbruch handelt?

"abc\n"  -->  "abc"

  • Superset: beliebige Zeichenfolge statt nur Zeilenumbruch: stackoverflow.com/questions/1038824/…

    – Ciro Santilli OurBigBook.com

    26. September 2015 um 21:46 Uhr


  • Die A+-Antwort lautet, wenn dies auf Vergessen zurückzuführen ist open() eine Datei mit den entsprechenden ‘newline=…’ Parameter für Ihre Plattform (universelle Newline-Unterstützung), müssen Sie ihn möglicherweise nicht explizit entfernen.

    – smci

    19. Dezember 2017 um 4:03 Uhr

Probieren Sie die Methode aus rstrip() (siehe dok Python 2 und Python 3)

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

Pythons rstrip() Methodenstreifen alle Arten von Leerzeichen am Ende, nicht nur ein Zeilenumbruch, wie es Perl tut chomp.

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

So entfernen Sie nur Zeilenumbrüche:

>>> '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() und 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'

  • Ich bin keine Python-Person, also habe ich keine Antwort darauf, aber Perls chomp() entfernt tatsächlich das Trennzeichen für Eingabedatensätze am Ende. Das ist ein Zeilenumbruch bei Unixy-Dingen, kann aber anders sein (z. B. Windows) und ist veränderbar. Gibt es eine Möglichkeit, diesen Wert nur einmal vom Ende einer Zeichenfolge zu entfernen?

    – Brian D. Foy

    8. November 2008 um 21:04 Uhr

  • brian d foy: Python hat kein Trennzeichen für Eingabedatensätze wie awk und Perl.

    – Peter Hosey

    9. November 2008 um 6:13 Uhr

  • @csde_rats, das stimmt nicht: OS X verwendet \n für Zeilenumbrüche genau wie Unix. (Vor OS X verwendete MacOS \r als Linientrenner, aber das endete vor 10 Jahren.)

    – skue

    4. November 2012 um 19:03 Uhr


  • @briandfoy Python bietet integrierte Unterstützung für universelle Zeilenumbrüche (nur beim Lesen, nicht beim Schreiben). Sie öffnen die Datei entweder im “U”- oder “rU”-Modus, und unabhängig von Windows, Linux, Mac, was auch immer, bis der Text Ihren Python-Code erreicht, wurde jeder Zeilenumbruch durch “\n” ersetzt. Sehen: python.org/dev/peps/pep-0278

    – AlcubierreDrive

    7. November 2012 um 8:11 Uhr

  • Ich werde weitermachen und das buchstabieren, weil ich ein Noob bin und mich eine Weile gefragt habe, warum es nicht funktioniert hat. .strip() ändert die Zeichenfolge nicht (hat wahrscheinlich etwas mit unveränderlichen Zeichenfolgen zu tun). Wenn nicht in der Befehlszeile, möchten Sie "string = string.strip()"

    – Script Kitty

    12. April 2016 um 1:06 Uhr

Und ich würde sagen, der “pythonische” Weg, Zeilen ohne nachgestellte 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']

  • Dies führt auch zu unerwarteten Ergebnissen, wenn Sie eine mehrzeilige Zeichenfolge haben und nur den letzten Zeilenabschluss entfernen möchten … (obwohl es wahrscheinlich dafür wieder verbunden werden kann).

    – Gert van den Berg

    31. Dezember 2021 um 19:27 Uhr

  • @GertvandenBerg die Methode wird aufgerufen splitlines(). Wenn ich ihm ein Multi-Linie string, ich erwarte nicht, dass es nur die letzte Zeile entfernt, weil ich ihm buchstäblich gesagt habe, dass es meinen mehrzeiligen String an den Zeilenumbrüchen in mehrere Strings aufteilen soll;) Es ist tatsächlich so, es zu verwenden, um Zeilenenden von einem einzeiligen String zu entfernen nur ein nützliches Eckgehäuse.

    – SvenS

    5. Mai 2022 um 10:51 Uhr

Mikes Benutzeravatar
Mike

Die kanonische Methode zum Entfernen von Zeilenendezeichen (EOL) besteht darin, die Methode string rstrip() zu verwenden, die alle nachgestellten \r oder \n entfernt. Hier sind 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'

Die Verwendung von ‘\r\n’ als Parameter für rstrip bedeutet, dass alle nachgestellten Kombinationen von ‘\r’ oder ‘\n’ entfernt werden. 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 erfordert ein nachgestelltes „\r“ als EOL-Zeichen. Der Windows-Computer, auf dem ich diese Nachricht verwendet habe, hatte sein eigenes EOL-Zeichen „\r\n“ angehängt. Daher sah das Ende jeder Zeile wie ‘\r\r\n’ aus. Die Verwendung von rstrip(‘\r\n’) hätte das gesamte ‘\r\r\n’ entfernt, was ich nicht wollte. In diesem Fall habe ich stattdessen einfach die letzten beiden Zeichen abgeschnitten.

Beachten Sie, dass im Gegensatz zu Perl chomp Funktion entfernt dies alle angegebenen Zeichen am Ende der Zeichenfolge, nicht nur eines:

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

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

    – Peter Hosey

    9. November 2008 um 6:15 Uhr

  • Danke für die Klarstellung. Natürlich funktioniert der rstrip(‘\r\n’) auch in diesem Fall.

    – Mike

    9. November 2008 um 11:35 Uhr

  • Es gibt auch os.linesepdie die EOL-Sequenz für das aktuelle Betriebssystem enthält.

    – EliCollins

    15. August 2011 um 13:44 Uhr


  • Dies ist die beste Antwort: Es nur entfernt Zeilenumbrüche und macht es für die gängigsten Plattformen korrekt.

    – Kevinarpe

    12. Februar 2015 um 3:58 Uhr

  • plus +1 Für die Verwendung \n und \r

    – fechnert

    28. Mai 2015 um 15:35 Uhr

Beachten Sie, dass sich rstrip nicht genau wie Perls chomp() verhält, da es den String nicht modifiziert. Das heißt in Perl:

$x="a\n";

chomp $x

ergibt sich $x Sein "a".

aber in Python:

x="a\n"

x.rstrip()

bedeutet, dass der Wert von x ist still "a\n". Selbst x=x.rstrip() liefert nicht immer das gleiche Ergebnis, da alle Leerzeichen vom Ende der Zeichenfolge entfernt werden, nicht nur höchstens ein Zeilenumbruch.

Jamies Benutzeravatar
Jamie

Ich könnte so etwas verwenden:

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

Ich denke, das Problem mit rstrip("\n") ist, dass Sie wahrscheinlich sicherstellen möchten, dass der Zeilentrenner tragbar ist. (Es wird gemunkelt, dass einige veraltete Systeme verwendet werden "\r\n"). Das andere Problem ist das rstrip entfernt wiederholte Leerzeichen. Hoffentlich os.linesep enthält die richtigen Zeichen. das obige funktioniert für mich.

  • Dies funktioniert jedoch nicht, wenn Sie versuchen, von Benutzern übermittelte Inhalte in einer Webanwendung zu bereinigen. Der Benutzerinhalt kann aus einer beliebigen Quelle stammen und beliebige Zeilenumbruchzeichen enthalten.

    – apiguy

    18. Januar 2012 um 18:50 Uhr

  • Guter Punkt, außer dass Sie möglicherweise “fremde” Dateien (von veralteten Systemen) auf Ihrem modernen Betriebssystem verarbeiten.

    – ChuckCottrill

    6. Februar 2016 um 2:56 Uhr

  • Denken Sie auch daran, dass das Lesen einer Datei im Textmodus auf einem Windows-System ebenfalls nicht funktioniert, da das abschließende Zeichen immer in ‘\n’ umgewandelt wird.

    – Verrückter Physiker

    28. April 2017 um 19:55 Uhr

  • @MadPhysicist Sie haben Recht, dass es konvertiert wird, aber es funktioniert immer noch, weil es dasselbe ist wie rstrip('\r\n') und rstrip() entfernt alle Zeichen, die sich im Argument befinden.

    – dtauxe

    18. April 2019 um 20:06 Uhr

Benutzeravatar von Flimm
Flimmer

Sie dürfen verwenden line = line.rstrip('\n'). Dadurch werden alle Zeilenumbrüche vom Ende der Zeichenfolge entfernt, nicht nur einer.

  • Dies funktioniert jedoch nicht, wenn Sie versuchen, von Benutzern übermittelte Inhalte in einer Webanwendung zu bereinigen. Der Benutzerinhalt kann aus einer beliebigen Quelle stammen und beliebige Zeilenumbruchzeichen enthalten.

    – apiguy

    18. Januar 2012 um 18:50 Uhr

  • Guter Punkt, außer dass Sie möglicherweise “fremde” Dateien (von veralteten Systemen) auf Ihrem modernen Betriebssystem verarbeiten.

    – ChuckCottrill

    6. Februar 2016 um 2:56 Uhr

  • Denken Sie auch daran, dass das Lesen einer Datei im Textmodus auf einem Windows-System ebenfalls nicht funktioniert, da das abschließende Zeichen immer in ‘\n’ umgewandelt wird.

    – Verrückter Physiker

    28. April 2017 um 19:55 Uhr

  • @MadPhysicist Sie haben Recht, dass es konvertiert wird, aber es funktioniert immer noch, weil es dasselbe ist wie rstrip('\r\n') und rstrip() entfernt alle Zeichen, die sich im Argument befinden.

    – dtauxe

    18. April 2019 um 20:06 Uhr

Benutzeravatar von Flimm
Flimmer

s = s.rstrip()

entfernt alle Zeilenumbrüche am Ende der Zeichenfolge s. Die Zuordnung wird benötigt, weil rstrip gibt eine neue Zeichenfolge zurück, anstatt die ursprüngliche Zeichenfolge zu ändern.

1438670cookie-checkWie kann ich einen abschließenden Zeilenumbruch entfernen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy