Im Folgenden wird der Umgang mit Zeichenketten, die Zeilenumbrüche enthalten, in Python beschrieben.
- Zeichenkette mit Zeilenumbrüchen erstellen, ausgeben (Display)
- Zeilenumbruch (je nach System entweder CR oder LF)
\n
(LF),\r\n
(CR+LF) - dreifaches Zitat
'''
,"""
- Wenn Sie einrücken möchten
- Zeilenumbruch (je nach System entweder CR oder LF)
- Verkettung einer Liste von Zeichenketten mit Zeilenumbrüchen
- String in Zeilenumbrüche und Liste aufteilen:
splitlines()
- Zeilenvorschubcodes entfernen und ersetzen
- Druckausgabe ohne abschließenden Zeilenumbruch
Zeichenkette mit Zeilenumbrüchen erstellen und ausgeben
Zeilenumbruch (je nach System entweder CR oder LF) \n(LF), \r\n(CR+LF)
Das Einfügen eines Zeilenvorschubs innerhalb einer Zeichenkette führt zu einer neuen Zeile.
s = 'Line1\nLine2\nLine3'
print(s)
# Line1
# Line2
# Line3
s = 'Line1\r\nLine2\r\nLine3'
print(s)
# Line1
# Line2
# Line3
Zeilenumbruchcodes können auf folgende Weise verwendet werden. In einigen Editoren können Sie einen Zeilenumbruchcode auswählen.
Macを含むUnix系 | \n (LF) |
Windows系 | \r\n (CR+LF) |
dreifaches Zitat ''',"""
Wenn die Zeichenkette in dreifache Anführungszeichen gesetzt wird, ist sie eine reine Zeichenkette, einschließlich Zeilenumbrüchen.
s = '''Line1
Line2
Line3'''
print(s)
# Line1
# Line2
# Line3
Wenn Sie einrücken möchten
Dreifache Anführungszeichen sind auch Leerzeichen in einer Zeichenkette. Wenn Sie also versuchen, den Code sauber zu schreiben und wie unten gezeigt einzurücken, werden unnötige Leerzeichen eingefügt.
s = '''
Line1
Line2
Line3
'''
print(s)
#
# Line1
# Line2
# Line3
#
Wenn man einen Backslash verwendet, um Zeilenumbrüche im Code zu ignorieren und ihn zu einer Fortsetzungszeile zu machen, kann er wie folgt geschrieben werden
Schließen Sie jede Zeile mit '' oder “” ein und fügen Sie am Ende des Satzes einen Zeilenumbruch ←n ein.
s = 'Line1\n'\
'Line2\n'\
'Line3'
print(s)
# Line1
# Line2
# Line3
Hier besteht die Syntax darin, dass aufeinanderfolgende String-Literale verkettet werden. Siehe den folgenden Artikel für weitere Einzelheiten.
Wenn Sie eine Zeichenkette einrücken möchten, fügen Sie einfach in jeder Zeile ein Leerzeichen hinzu.
s = 'Line1\n'\
' Line2\n'\
' Line3'
print(s)
# Line1
# Line2
# Line3
Da außerdem Zeilenumbrüche in Klammern möglich sind, kann das Folgende mit Klammern statt mit Backslashes geschrieben werden.
s = ('Line1\n'
'Line2\n'
'Line3')
print(s)
# Line1
# Line2
# Line3
s = ('Line1\n'
' Line2\n'
' Line3')
print(s)
# Line1
# Line2
# Line3
Wenn Sie nur den Anfang einer Zeile ausrichten wollen, fügen Sie einfach einen umgekehrten Schrägstrich an die erste Zeile mit dreifachen Anführungszeichen an.
s = '''\
Line1
Line2
Line3'''
print(s)
# Line1
# Line2
# Line3
s = '''\
Line1
Line2
Line3'''
print(s)
# Line1
# Line2
# Line3
Verkettung einer Liste von Zeichenketten mit Zeilenumbrüchen
Die String-Methode join() kann verwendet werden, um eine Liste von Strings zu einem einzigen String zu verketten.
Wenn join() nach einem Zeilenumbruch aufgerufen wird, wird jedes Zeichenelement mit einem Zeilenumbruch verkettet.
l = ['Line1', 'Line2', 'Line3']
s_n = '\n'.join(l)
print(s_n)
# Line1
# Line2
# Line3
print(repr(s_n))
# 'Line1\nLine2\nLine3'
s_rn = '\r\n'.join(l)
print(s_rn)
# Line1
# Line2
# Line3
print(repr(s_rn))
# 'Line1\r\nLine2\r\nLine3'
Wie im obigen Beispiel kann die eingebaute Funktion repr() verwendet werden, um Zeichenketten, die Zeilenumbruchcodes enthalten, auf ihre Richtigkeit zu überprüfen.
String in Zeilenumbrüche und Liste aufteilen: splitlines()
Die String-Methode splitlines() kann verwendet werden, um eine Zeichenkette in eine Liste von Zeilenumbrüchen zu zerlegen.
splitlines() teilt jeden der folgenden Zeilenumbruchcodes auf. Vertikale Tabulatoren und Seitenumbrüche werden ebenfalls aufgeteilt.
\n
\r\n
\v
\f
s = 'Line1\nLine2\r\nLine3'
print(s.splitlines())
# ['Line1', 'Line2', 'Line3']
Zeilenvorschubcodes entfernen und ersetzen
Durch die Kombination von splitlines() und join() ist es möglich, Zeilenumbruchcodes aus einer Zeichenkette, die Zeilenumbrüche enthält, zu entfernen oder durch andere Zeichenketten zu ersetzen.
s = 'Line1\nLine2\r\nLine3'
print(''.join(s.splitlines()))
# Line1Line2Line3
print(' '.join(s.splitlines()))
# Line1 Line2 Line3
print(','.join(s.splitlines()))
# Line1,Line2,Line3
Auch die stapelweise Änderung von Zeilenumbruchcodes ist möglich. Auch wenn Zeilenumbruchcodes gemischt oder unbekannt sind, können sie mit splitlines() aufgespalten und dann mit dem gewünschten Zeilenumbruchcode verkettet werden.
s_n = '\n'.join(s.splitlines())
print(s_n)
# Line1
# Line2
# Line3
print(repr(s_n))
# 'Line1\nLine2\nLine3'
Wie bereits erwähnt, trennt splitlines() beide Zeilenumbrüche auf, so dass man sich bei der Methode, die splitlines() und join() kombiniert, nicht besonders um Zeilenumbrüche kümmern muss.
Wenn der Zeilenumbruchscode eindeutig ist, kann er auch durch die Methode replace() ersetzt werden, die die Zeichenkette austauscht.
s = 'Line1\nLine2\nLine3'
print(s.replace('\n', ''))
# Line1Line2Line3
print(s.replace('\n', ','))
# Line1,Line2,Line3
Beachten Sie jedoch, dass er nicht funktioniert, wenn er andere Zeilenvorschubcodes als erwartet enthält.
s = 'Line1\nLine2\r\nLine3'
s_error = s.replace('\n', ',')
print(s_error)
# ,Line3Line2
print(repr(s_error))
# 'Line1,Line2\r,Line3'
s_error = s.replace('\r\n', ',')
print(s_error)
# Line1
# Line2,Line3
print(repr(s_error))
# 'Line1\nLine2,Line3'
Es ist möglich, mehrere Zeilenumbrüche durch Wiederholung von replace() zu ersetzen, aber das funktioniert nicht, wenn die Reihenfolge falsch ist, weil “\r\n” “\n” enthält. Die oben beschriebene Methode, die splitlines() und join() kombiniert, ist sicherer, da man sich nicht um Zeilenvorschubcodes kümmern muss.
s = 'Line1\nLine2\r\nLine3'
print(s.replace('\r\n', ',').replace('\n', ','))
# Line1,Line2,Line3
s_error = s.replace('\n', ',').replace('\r\n', ',')
print(s_error)
# ,Line3Line2
print(repr(s_error))
# 'Line1,Line2\r,Line3'
print(','.join(s.splitlines()))
# Line1,Line2,Line3
Verwenden Sie die Methode rstrip(), um Zeilenvorschubcodes am Ende eines Satzes zu entfernen. rstrip() ist eine Methode zum Entfernen von Leerzeichen (einschließlich Zeilenvorschub) am rechten Ende eines Strings.
s = 'aaa\n'
print(s + 'bbb')
# aaa
# bbb
print(s.rstrip() + 'bbb')
# aaabbb
Druckausgabe ohne abschließenden Zeilenumbruch
Die Funktion print() fügt standardmäßig einen Zeilenumbruch am Ende ein. Wenn print() nacheinander ausgeführt wird, wird daher jedes Ausgabeergebnis in einer neuen Zeile angezeigt.
print('a')
print('b')
print('c')
# a
# b
# c
Der Grund dafür ist, dass der Standardwert des Arguments end von print(), das die am Ende hinzuzufügende Zeichenkette angibt, das Newline-Symbol ist.
Wenn Sie keinen Zeilenumbruch am Ende wünschen, setzen Sie das Argument end einfach auf eine leere Zeichenkette, und die Ausgabe wird ohne Zeilenumbruch am Ende ausgegeben.
print('a', end='')
print('b', end='')
print('c', end='')
# abc
Das Argument end kann eine beliebige Zeichenkette sein.
print('a', end='-')
print('b', end='-')
print('c')
# a-b-c
Wenn Sie jedoch Zeichenketten für die Ausgabe verketten wollen, ist es einfacher, die ursprünglichen Zeichenketten zu verketten, als sie im Endargument von print() anzugeben. Siehe den folgenden Artikel.