Frage Wie kann ich eine nachfolgende neue Zeile in Python entfernen (chomp)?


Was ist das Python-Äquivalent von Perls? chomp Funktion, die das letzte Zeichen eines Strings entfernt, wenn es ein Newline ist?


1328
2017-11-08 18:25


Ursprung


Antworten:


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 nachgestellten Whitespace standardmäßig, nicht nur eine neue Zeile wie 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 '

Es gibt auch die Methoden lstrip() und strip():

>>> 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'

1388
2017-11-09 05:52



Und ich würde sagen, die "pythonische" Art, Zeilen ohne nachfolgende 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']

139
2017-11-09 00:11



Die kanonische Methode zum Entfernen von End-of-Line-Zeichen (EOL-Zeichen) besteht darin, die string rstrip () -Methode zu verwenden, die alle abschließenden Zeichen (\ r oder \ n) entfernt. 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'

Wenn Sie '\ r \ n' als Parameter für rstrip verwenden, werden alle nachfolgenden Kombinationen von '\ r' oder '\ n' entfernt. Deshalb funktioniert es in allen drei oben genannten Fällen.

Diese Nuance ist in seltenen Fällen wichtig. Zum Beispiel musste ich einmal eine Textdatei verarbeiten, die eine HL7-Nachricht enthielt. Der HL7-Standard erfordert ein abschließendes '\ r' als EOL-Zeichen. Der Windows-Computer, auf dem ich diese Nachricht verwendete, hatte sein eigenes '\ r \ n' EOL-Zeichen 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 nicht das ist, was ich wollte. In diesem Fall habe ich einfach die letzten zwei Zeichen abgeschnitten.

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

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

125
2017-11-28 17:31



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

$x="a\n";

chomp $x

Ergebnisse in $x Sein "a".

aber in Python:

x="a\n"

x.rstrip()

wird bedeuten, dass der Wert von x ist immer noch  "a\n". Sogar x=x.rstrip() liefert nicht immer das gleiche Ergebnis, da es alle Whitespaces vom Ende des Strings entfernt, nicht nur einen Newline-String.


96
2018-03-07 16:07



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 das Zeilentrennzeichen tragbar ist. (Es wird gemunkelt, dass einige antiquierte Systeme verwendet werden "\r\n"). Die andere Frage ist, dass rstrip wird wiederholt Whitespace ausstrippen. hoffnungsvoll os.linesep enthält die richtigen Zeichen. das obige funktioniert für mich.


46
2018-05-13 16:41



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


37
2018-03-09 08:02



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.


28
2018-02-29 22:40



"line 1\nline 2\r\n...".replace('\n', '').replace('\r', '')
>>> 'line 1line 2...'

oder du könntest immer mit Regexps geekier werden :)

habe Spaß!


23
2017-11-21 04:29



Sie können Streifen verwenden:

line = line.strip()

Demo:

>>> "\n\n hello world \n\n".strip()
'hello world'

19
2018-04-27 11:43



Vorsichtig mit "foo".rstrip(os.linesep): Das wird nur die Newline-Zeichen für die Plattform chompsen, auf der Python ausgeführt wird. Stellen Sie sich vor, Sie würden die Zeilen einer Windows-Datei unter Linux ansprechen:

$ python
Python 2.7.1 (r271:86832, Mar 18 2011, 09:09:48) 
[GCC 4.5.0 20100604 [gcc-4_5-branch revision 160292]] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os, sys
>>> sys.platform
'linux2'
>>> "foo\r\n".rstrip(os.linesep)
'foo\r'
>>>

Benutzen "foo".rstrip("\r\n") stattdessen, wie Mike oben sagt.


18
2017-10-23 01:32