Ausgabe, Verkettung, Aufteilung, Löschen und Ersetzen von Zeichenketten mit Zeilenumbrüchen in Python

Geschäft

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
  • 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.