Wie entferne ich das letzte Zeichen einer Zeichenkette, wenn es ein Zeilenumbruch ist?
"abc\n" --> "abc"
Wie entferne ich das letzte Zeichen einer Zeichenkette, wenn es ein Zeilenumbruch ist?
"abc\n" --> "abc"
Rstrip macht in vielerlei Hinsicht nicht dasselbe wie chomp. Lesen Sie http://perldoc.perl.org/functions/chomp.html und sehen, dass chomp in der Tat sehr komplex ist.
Mein Hauptargument ist jedoch, dass chomp höchstens 1 Zeilenende entfernt, während rstrip so viele entfernt, wie es kann.
Hier können Sie sehen, wie rstrip alle Zeilenumbrüche entfernt:
>>> 'foo\n\n'.rstrip(os.linesep)
'foo'
Eine sehr viel genauere Annäherung an die typische Verwendung von Perl chomp kann mit re.sub erreicht werden, etwa so:
>>> re.sub(os.linesep + r'\Z','','foo\n\n')
'foo\n'
Hut ab, Sie sind der Einzige, der auf dieses sehr wichtige Detail hingewiesen hat. Wie jedoch bereits jemand weiter oben angemerkt hat, funktioniert die Verwendung von os.linesep nicht, wenn Sie Dateien von einem anderen System lesen. Dies könnte ein wenig mehr Arbeit in Python erfordern, um das Ende der Zeile tatsächlich zu überprüfen.
Vorsichtig mit "foo".rstrip(os.linesep)
: Damit werden nur die Zeilenumbrüche für die Plattform, auf der Ihr Python ausgeführt wird, gechipt. Stellen Sie sich vor, Sie chippen die Zeilen einer Windows-Datei unter Linux, zum Beispiel:
$ 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'
>>>
Verwenden Sie "foo".rstrip("\r\n")
stattdessen, wie Mike oben sagt.
Eine Beispiel in der Dokumentation von Python verwendet einfach line.strip()
.
Perls chomp
Funktion entfernt eine Zeilenumbruchsequenz am Ende einer Zeichenkette nur dann, wenn sie tatsächlich vorhanden ist.
Hier ist, wie ich plane, das in Python zu tun, wenn process
ist konzeptionell die Funktion, die ich benötige, um mit jeder Zeile dieser Datei etwas Sinnvolles anzustellen:
import os
sep_pos = -len(os.linesep)
with open("file.txt") as f:
for line in f:
if line[sep_pos:] == os.linesep:
line = line[:sep_pos]
process(line)
Ich programmiere nicht in Python, aber ich bin auf ein FAQ at python.org befürwortet S.rstrip(" \r\n ") für Python 2.2 oder höher.
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.
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.