textwrap — Textum- und Auffüllung

Quellcode: Lib/textwrap.py


Das Modul textwrap stellt einige Hilfsfunktionen sowie TextWrapper, die Klasse, die die gesamte Arbeit erledigt, zur Verfügung. Wenn Sie nur ein oder zwei Textzeichenketten umbrechen oder auffüllen müssen, sollten die Hilfsfunktionen ausreichen; andernfalls sollten Sie aus Effizienzgründen eine Instanz von TextWrapper verwenden.

textwrap.wrap(text, width=70, *, initial_indent='', subsequent_indent='', expand_tabs=True, replace_whitespace=True, fix_sentence_endings=False, break_long_words=True, drop_whitespace=True, break_on_hyphens=True, tabsize=8, max_lines=None, placeholder=' [...]')

Schlägt den einzelnen Absatz in text (einer Zeichenkette) so um, dass jede Zeile maximal width Zeichen lang ist. Gibt eine Liste von Ausgabezielen zurück, ohne abschließende Zeilenumbrüche.

Optionale Schlüsselwortargumente entsprechen den Instanzattributen von TextWrapper, die unten dokumentiert sind.

Siehe die Methode TextWrapper.wrap() für weitere Details zur Funktionsweise von wrap().

textwrap.fill(text, width=70, *, initial_indent='', subsequent_indent='', expand_tabs=True, replace_whitespace=True, fix_sentence_endings=False, break_long_words=True, drop_whitespace=True, break_on_hyphens=True, tabsize=8, max_lines=None, placeholder=' [...]')

Schlägt den einzelnen Absatz in text um und gibt eine einzelne Zeichenkette zurück, die den umgeschlagenen Absatz enthält. fill() ist eine Abkürzung für

"\n".join(wrap(text, ...))

Insbesondere akzeptiert fill() exakt die gleichen Schlüsselwortargumente wie wrap().

textwrap.shorten(text, width, *, fix_sentence_endings=False, break_long_words=True, break_on_hyphens=True, placeholder=' [...]')

Verkürzt und kürzt den gegebenen text, um ihn in die gegebene width einzupassen.

Zuerst wird der Leerraum in text komprimiert (aller Leerraum wird durch einzelne Leerzeichen ersetzt). Wenn das Ergebnis in die width passt, wird es zurückgegeben. Andernfalls werden genügend Wörter vom Ende gestrichen, so dass die verbleibenden Wörter plus das placeholder innerhalb der width passen.

>>> textwrap.shorten("Hello  world!", width=12)
'Hello world!'
>>> textwrap.shorten("Hello  world!", width=11)
'Hello [...]'
>>> textwrap.shorten("Hello world", width=10, placeholder="...")
'Hello...'

Optionale Schlüsselwortargumente entsprechen den Instanzattributen von TextWrapper, die unten dokumentiert sind. Beachten Sie, dass der Leerraum komprimiert wird, bevor der Text an die TextWrapper fill() Funktion übergeben wird. Daher haben die Änderung des Werts von tabsize, expand_tabs, drop_whitespace und replace_whitespace keine Auswirkung.

Hinzugefügt in Version 3.4.

textwrap.dedent(text)

Entfernt jeglichen gemeinsamen führenden Leerraum von jeder Zeile in text.

Dies kann verwendet werden, um dreifach Anführungszeichen-Zeichenketten bündig mit dem linken Rand der Anzeige auszurichten, während sie im Quellcode weiterhin eingerückt dargestellt werden.

Beachten Sie, dass Tabs und Leerzeichen beide als Leerraum behandelt werden, aber sie sind nicht gleichwertig: die Zeilen "  hello" und "\thello" werden als keine gemeinsamen führenden Leerräume betrachtet.

Zeilen, die nur aus Leerraum bestehen, werden im Eingabetext ignoriert und im Ausgabetext als einzelner Zeilenumbruch normalisiert.

Zum Beispiel

def test():
    # end first line with \ to avoid the empty line!
    s = '''\
    hello
      world
    '''
    print(repr(s))          # prints '    hello\n      world\n    '
    print(repr(dedent(s)))  # prints 'hello\n  world\n'
textwrap.indent(text, prefix, predicate=None)

Fügt prefix am Anfang ausgewählter Zeilen in text hinzu.

Zeilen werden durch Aufrufen von text.splitlines(True) getrennt.

Standardmäßig wird prefix zu allen Zeilen hinzugefügt, die nicht nur aus Leerraum bestehen (einschließlich etwaiger Zeilenenden).

Zum Beispiel

>>> s = 'hello\n\n \nworld'
>>> indent(s, '  ')
'  hello\n\n \n  world'

Das optionale Argument predicate kann verwendet werden, um zu steuern, welche Zeilen eingerückt werden. Zum Beispiel ist es einfach, prefix zu sogar leeren und nur aus Leerraum bestehenden Zeilen hinzuzufügen.

>>> print(indent(s, '+ ', lambda line: True))
+ hello
+
+
+ world

Hinzugefügt in Version 3.3.

wrap(), fill() und shorten() arbeiten, indem sie eine TextWrapper-Instanz erstellen und eine Methode darauf aufrufen. Diese Instanz wird nicht wiederverwendet. Daher kann es für Anwendungen, die viele Textzeichenketten mit wrap() und/oder fill() verarbeiten, effizienter sein, ein eigenes TextWrapper-Objekt zu erstellen.

Text wird vorzugsweise an Leerzeichen und direkt nach Bindestrichen in zusammengesetzten Wörtern umgebrochen; erst dann werden lange Wörter bei Bedarf gebrochen, es sei denn, TextWrapper.break_long_words ist auf false gesetzt.

class textwrap.TextWrapper(**kwargs)

Der Konstruktor von TextWrapper akzeptiert eine Reihe von optionalen Schlüsselwortargumenten. Jedes Schlüsselwortargument entspricht einem Instanzattribut, so zum Beispiel

wrapper = TextWrapper(initial_indent="* ")

ist dasselbe wie

wrapper = TextWrapper()
wrapper.initial_indent = "* "

Sie können dasselbe TextWrapper-Objekt mehrmals wiederverwenden und können alle seine Optionen durch direkte Zuweisung zu Instanzattributen zwischen den Verwendungen ändern.

Die Instanzattribute von TextWrapper (und Schlüsselwortargumente für den Konstruktor) sind wie folgt:

width

(Standard: 70) Die maximale Länge umgebrochener Zeilen. Solange es keine einzelnen Wörter im Eingabetext gibt, die länger als width sind, garantiert TextWrapper, dass keine Ausgabezielte länger als width Zeichen sein wird.

expand_tabs

(Standard: True) Wenn true, werden alle Tabulatoren in text durch Leerzeichen expandiert, indem die Methode expandtabs() von text verwendet wird.

tabsize

(Standard: 8) Wenn expand_tabs true ist, werden alle Tabulatoren in text entsprechend der aktuellen Spalte und der gegebenen Tabulatorbreite zu null oder mehr Leerzeichen expandiert.

Hinzugefügt in Version 3.3.

replace_whitespace

(Standard: True) Wenn true, ersetzt die Methode wrap() nach der Tabulatorerweiterung, aber vor dem Umbruch, jedes Leerzeichen durch ein einzelnes Leerzeichen. Die ersetzten Leerzeichen sind: Tabulator, Zeilenumbruch, vertikaler Tabulator, Seitenvorschub und Wagenrücklauf ('\t\n\v\f\r').

Hinweis

Wenn expand_tabs false ist und replace_whitespace true ist, wird jedes Tabulatorzeichen durch ein einzelnes Leerzeichen ersetzt, was **nicht** dasselbe ist wie die Tabulatorerweiterung.

Hinweis

Wenn replace_whitespace false ist, können Zeilenumbrüche mitten in einer Zeile erscheinen und zu seltsamen Ausgaben führen. Aus diesem Grund sollte Text in Absätze aufgeteilt werden (mittels str.splitlines() oder ähnlichem), die separat umgebrochen werden.

drop_whitespace

(Standard: True) Wenn true, werden Leerzeichen am Anfang und Ende jeder Zeile (nach dem Umbruch, aber vor dem Einrücken) entfernt. Leerzeichen am Anfang des Absatzes werden jedoch nicht entfernt, wenn ihnen Nicht-Leerzeichen folgen. Wenn entfernte Leerzeichen eine ganze Zeile bilden, wird die gesamte Zeile entfernt.

initial_indent

(Standard: '') Zeichenkette, die der ersten Zeile der umgebrochenen Ausgabe vorangestellt wird. Zählt zur Länge der ersten Zeile. Die leere Zeichenkette wird nicht eingerückt.

subsequent_indent

(Standard: '') Zeichenkette, die allen Zeilen der umgebrochenen Ausgabe vorangestellt wird, außer der ersten. Zählt zur Länge jeder Zeile außer der ersten.

fix_sentence_endings

(Standard: False) Wenn true, versucht TextWrapper, Satzenden zu erkennen und sicherzustellen, dass Sätze immer durch genau zwei Leerzeichen getrennt sind. Dies ist im Allgemeinen für Text in einer nichtproportionalen Schriftart wünschenswert. Der Algorithmus zur Satzerkennung ist jedoch unvollkommen: Er geht davon aus, dass ein Satzende aus einem Kleinbuchstaben gefolgt von einem der Zeichen '.', '!' oder '?' besteht, möglicherweise gefolgt von einem der Anführungszeichen '"' oder "'", gefolgt von einem Leerzeichen. Ein Problem dieses Algorithmus ist, dass er den Unterschied zwischen „Dr.“ in

[...] Dr. Frankenstein's monster [...]

und „Spot.“ in

[...] See Spot. See Spot run [...]

fix_sentence_endings ist standardmäßig false.

Da der Algorithmus zur Satzerkennung von string.lowercase für die Definition von „Kleinbuchstabe“ abhängt und die Konvention der Verwendung von zwei Leerzeichen nach einem Punkt zur Trennung von Sätzen in derselben Zeile gilt, ist er spezifisch für englischsprachige Texte.

break_long_words

(Standard: True) Wenn true, werden Wörter, die länger als width sind, gebrochen, um sicherzustellen, dass keine Zeilen länger als width sind. Wenn false, werden lange Wörter nicht gebrochen, und einige Zeilen können länger als width sein. (Lange Wörter werden in eine eigene Zeile gesetzt, um den Betrag zu minimieren, um den width überschritten wird.)

break_on_hyphens

(Standard: True) Wenn true, wird der Umbruch vorzugsweise an Leerzeichen und direkt nach Bindestrichen in zusammengesetzten Wörtern erfolgen, wie es im Englischen üblich ist. Wenn false, werden nur Leerzeichen als potenziell gute Stellen für Zeilenumbrüche betrachtet. Sie müssen jedoch break_long_words auf false setzen, wenn Sie wirklich unteilbare Wörter wünschen. Das Standardverhalten in früheren Versionen war, gebrochene Wörter immer zu erlauben.

max_lines

(Standard: None) Wenn nicht None, dann enthält die Ausgabe maximal max_lines Zeilen, wobei placeholder am Ende der Ausgabe erscheint.

Hinzugefügt in Version 3.4.

placeholder

(Standard: ' [...]') Zeichenkette, die am Ende des Ausgabetextes erscheint, wenn er gekürzt wurde.

Hinzugefügt in Version 3.4.

TextWrapper stellt auch einige öffentliche Methoden zur Verfügung, analog zu den Modul-Hilfsfunktionen:

wrap(text)

Schlägt den einzelnen Absatz in text (einer Zeichenkette) so um, dass jede Zeile maximal width Zeichen lang ist. Alle Umbruchoptionen werden aus den Instanzattributen der TextWrapper-Instanz übernommen. Gibt eine Liste von Ausgabezielen zurück, ohne abschließende Zeilenumbrüche. Wenn die umgebrochene Ausgabe keinen Inhalt hat, ist die zurückgegebene Liste leer.

fill(text)

Schlägt den einzelnen Absatz in text um und gibt eine einzelne Zeichenkette zurück, die den umgebrochenen Absatz enthält.