Einhüllen, Abschneiden und Formatieren von Zeichenketten in Python mit textwrap

Geschäft

Um eine Zeichenkette in Python zu formatieren, indem man sie umbricht (Zeilenumbruch) und an einer beliebigen Anzahl von Zeichen abschneidet (abkürzt), verwenden Sie das Modul textwrap der Standardbibliothek.

Hier finden Sie die folgenden Informationen.

  • Eine Zeichenkette umbrechen (Zeilenvorschub): wrap(),fill()
  • Zeichenketten abschneiden (ausgelassen): shorten()
  • TextWrapper-Objekt

Wenn Sie lange Zeichenfolgen auf mehrere Zeilen im Code statt in der Ausgabe schreiben wollen, lesen Sie den folgenden Artikel.

Eine Zeichenkette umbrechen (Zeilenvorschub): wrap(), fill()

Mit der Funktion wrap() des Moduls textwrap können Sie eine durch Wortumbrüche unterteilte Liste auf eine beliebige Anzahl von Zeichen bringen.

Geben Sie die Anzahl der Zeichen für das zweite Argument width an. Die Vorgabe ist width=70.

import textwrap

s = "Python can be easy to pick up whether you're a first time programmer or you're experienced with other languages"

s_wrap_list = textwrap.wrap(s, 40)
print(s_wrap_list)
# ['Python can be easy to pick up whether', "you're a first time programmer or you're", 'experienced with other languages']

Anhand der erhaltenen Liste können Sie eine Zeichenkette, die durch einen Zeilenumbruch unterbrochen ist, wie folgt ermitteln
'\n'.join(list)

print('\n'.join(s_wrap_list))
# Python can be easy to pick up whether
# you're a first time programmer or you're
# experienced with other languages

Die Funktion fill() gibt anstelle einer Liste eine Zeichenkette mit Zeilenumbruch zurück. Es ist dasselbe wie die Ausführung des folgenden Codes nach wrap() wie im obigen Beispiel.
'\n'.join(list)

Dies ist praktischer, wenn Sie keine Liste benötigen, sondern eine Zeichenkette mit fester Breite auf einem Terminal ausgeben wollen usw.

print(textwrap.fill(s, 40))
# Python can be easy to pick up whether
# you're a first time programmer or you're
# experienced with other languages

Wenn das Argument max_line angegeben ist, wird die Anzahl der nachfolgenden Zeilen weggelassen.

print(textwrap.wrap(s, 40, max_lines=2))
# ['Python can be easy to pick up whether', "you're a first time programmer or [...]"]

print(textwrap.fill(s, 40, max_lines=2))
# Python can be easy to pick up whether
# you're a first time programmer or [...]

Wird dies nicht angegeben, wird standardmäßig die folgende Zeichenkette am Ende ausgegeben.
' [...]'

Es kann durch eine beliebige Zeichenkette mit dem Argument Platzhalter ersetzt werden.

print(textwrap.fill(s, 40, max_lines=2, placeholder=' ~'))
# Python can be easy to pick up whether
# you're a first time programmer or ~

Mit dem Argument initial_indent können Sie auch eine Zeichenkette angeben, die am Anfang der ersten Zeile eingefügt wird. Dies kann verwendet werden, wenn Sie den Anfang eines Absatzes einrücken möchten.

print(textwrap.fill(s, 40, max_lines=2, placeholder=' ~', initial_indent='  '))
#   Python can be easy to pick up whether
# you're a first time programmer or ~

Seien Sie vorsichtig mit Zeichen in voller Größe und halber Größe.

In Textwrap wird die Anzahl der Zeichen durch die Anzahl der Zeichen und nicht durch die Zeichenbreite gesteuert, und sowohl Einzelbyte- als auch Doppelbyte-Zeichen werden als ein Zeichen betrachtet.

s = '文字文字文字文字文字文字12345,67890, 文字文字文字abcde'

print(textwrap.fill(s, 12))
# 文字文字文字文字文字文字
# 12345,67890,
# 文字文字文字abcde

Wenn Sie einen Text mit gemischten Kanji-Zeichen mit einer festen Breite umbrechen möchten, beachten Sie bitte die folgenden Hinweise.

Zeichenketten abschneiden (ausgelassen): shorten()

Wenn Sie Zeichenketten kürzen und auslassen wollen, verwenden Sie die Funktion shorten() im Modul textwrap.

In Worteinheiten abgekürzt, um eine beliebige Anzahl von Zeichen unterzubringen. Die Anzahl der Zeichen, einschließlich der Zeichenkette, die die Auslassung anzeigt, ist beliebig. Die Zeichenkette, die die Auslassung anzeigt, kann mit dem Argument Platzhalter festgelegt werden, das standardmäßig wie folgt lautet.
' [...]'

s = 'Python is powerful'

print(textwrap.shorten(s, 12))
# Python [...]

print(textwrap.shorten(s, 12, placeholder=' ~'))
# Python is ~

Japanische Zeichenfolgen beispielsweise lassen sich jedoch nicht gut abkürzen, da sie nicht in Wörter unterteilt werden können.

s = 'Pythonについて。Pythonは汎用のプログラミング言語である。'

print(textwrap.shorten(s, 20))
# [...]

Wenn Sie abkürzen möchten, indem Sie nur die Anzahl der Zeichen statt der Worteinheiten berücksichtigen, können Sie dies wie folgt erreichen.

s_short = s[:12] + '...'
print(s_short)
# Pythonについて。P...

TextWrapper-Objekt

Wenn Sie wrap() oder fill() viele Male mit einer festen Konfiguration verwenden wollen, ist es effizient, ein TextWrapper-Objekt zu erstellen.

wrapper = textwrap.TextWrapper(width=30, max_lines=3, placeholder=' ~', initial_indent='  ')

s = "Python can be easy to pick up whether you're a first time programmer or you're experienced with other languages"

print(wrapper.wrap(s))
# ['  Python can be easy to pick', "up whether you're a first time", "programmer or you're ~"]

print(wrapper.fill(s))
#   Python can be easy to pick
# up whether you're a first time
# programmer or you're ~

Die gleichen Einstellungen können wiederverwendet werden.

Copied title and URL