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 vonwrap().
- 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 wiewrap().
- 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 dieTextWrapperfill()Funktion übergeben wird. Daher haben die Änderung des Werts vontabsize,expand_tabs,drop_whitespaceundreplace_whitespacekeine 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
TextWrapperakzeptiert eine Reihe von optionalen Schlüsselwortargumenten. Jedes Schlüsselwortargument entspricht einem Instanzattribut, so zum Beispielwrapper = 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 alswidthsind, garantiertTextWrapper, dass keine Ausgabezielte länger alswidthZeichen sein wird.
- expand_tabs¶
(Standard:
True) Wenn true, werden alle Tabulatoren in text durch Leerzeichen expandiert, indem die Methodeexpandtabs()von text verwendet wird.
- tabsize¶
(Standard:
8) Wennexpand_tabstrue 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 Methodewrap()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_tabsfalse ist undreplace_whitespacetrue ist, wird jedes Tabulatorzeichen durch ein einzelnes Leerzeichen ersetzt, was **nicht** dasselbe ist wie die Tabulatorerweiterung.Hinweis
Wenn
replace_whitespacefalse 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 (mittelsstr.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, versuchtTextWrapper, 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_endingsist standardmäßig false.Da der Algorithmus zur Satzerkennung von
string.lowercasefü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 alswidthsind, gebrochen, um sicherzustellen, dass keine Zeilen länger alswidthsind. Wenn false, werden lange Wörter nicht gebrochen, und einige Zeilen können länger alswidthsein. (Lange Wörter werden in eine eigene Zeile gesetzt, um den Betrag zu minimieren, um denwidthü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 jedochbreak_long_wordsauf 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 nichtNone, 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.
TextWrapperstellt 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
widthZeichen lang ist. Alle Umbruchoptionen werden aus den Instanzattributen derTextWrapper-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.