
In Python können Sie Objekte wie Listen, Listen und Wörterbücher mit dem pprint-Modul schön drucken.
Dieser Artikel hat folgenden Inhalt.
- Grundlegende Verwendung von pprint
- Geben Sie die Ausgabebreite (Anzahl Zeichen) an:
width
- Geben Sie die Ausgabetiefe an:
depth
- Geben Sie die Einstiegsbreite an:
indent
- Zeilenumbrüche reduzieren:
compact
- In Zeichenfolge umwandeln:
pprint.pformat()
- Beispiel: Hübsches Drucken einer Liste von Listen
Das Textwrap-Modul ist nützlich, um lange Zeichenfolgen anstelle von Listen oder Wörterbüchern umzubrechen oder abzuschneiden. Siehe folgenden Artikel.
Im Beispielcode wird das pprint-Modul wie folgt importiert, und die Liste der Wörterbücher wird als Beispiel verwendet. Das Print-Modul ist in der Standardbibliothek enthalten und muss daher nicht zusätzlich installiert werden.
import pprint
l = [{'Name': 'Alice XXX', 'Age': 40, 'Points': [80, 20]},
{'Name': 'Bob YYY', 'Age': 20, 'Points': [90, 10]},
{'Name': 'Charlie ZZZ', 'Age': 30, 'Points': [70, 30]}]
Grundlegende Verwendung von pprint
Die normale Funktion print() druckt die Elemente einer Liste oder eines Wörterbuchs in einer einzigen Zeile ohne Zeilenumbrüche.
print(l)
# [{'Name': 'Alice XXX', 'Age': 40, 'Points': [80, 20]}, {'Name': 'Bob YYY', 'Age': 20, 'Points': [90, 10]}, {'Name': 'Charlie ZZZ', 'Age': 30, 'Points': [70, 30]}]
Mit pprint.pprint() wird jedes Element der Liste wie unten in einer neuen unterteilten Zeile gezeigt, was das Lesen erleichtert.
pprint.pprint(l)
# [{'Age': 40, 'Name': 'Alice XXX', 'Points': [80, 20]},
# {'Age': 20, 'Name': 'Bob YYY', 'Points': [90, 10]},
# {'Age': 30, 'Name': 'Charlie ZZZ', 'Points': [70, 30]}]
Die Position des Zeilenumbruchs wird durch die unten beschriebenen Argumenteinstellungen bestimmt.
Beachten Sie, dass, wie im Beispiel gezeigt, die Elemente des Wörterbuchs in der Reihenfolge der Schlüssel sortiert sind. Wenn der in Python 3.8 hinzugefügte Parameter sort_dicts auf False gesetzt ist (Standard:True), the order of the dictionaries is kept, but in earlier versions, they are always sorted.
If SIE es in einen String str konvertieren möchten, anstatt es auszugeben, verwenden SIE pprint.pformat(), das unten beschrieben WIRD.
Geben Sie die Ausgabebreite (Anzahl Zeichen) an:width
Mit width kann die Ausgabebreite (Anzahl Zeichen) angegeben werden.
Die Zeile wird umgebrochen, um die angegebene Anzahl von Zeichen aufzunehmen. Der Standardwert ist width=80.
pprint.pprint(l, width=40)
# [{'Age': 40,
# 'Name': 'Alice XXX',
# 'Points': [80, 20]},
# {'Age': 20,
# 'Name': 'Bob YYY',
# 'Points': [90, 10]},
# {'Age': 30,
# 'Name': 'Charlie ZZZ',
# 'Points': [70, 30]}]
Wenn die Breite groß ist, WIRD kein Zeilenumbruch eingefügt und die Ausgabe ist die gleiche wie bei print().
pprint.pprint(l, width=200)
# [{'Age': 40, 'Name': 'Alice XXX', 'Points': [80, 20]}, {'Age': 20, 'Name': 'Bob YYY', 'Points': [90, 10]}, {'Age': 30, 'Name': 'Charlie ZZZ', 'Points': [70, 30]}]
Eine Linie wird an einem Element einer Liste oder eines Wörterbuchs unterbrochen, nicht zwischen Schlüsseln und Wert eines Wörterbuchs oder mitten in einer Zahl. Daher passt es nicht immer in die Breite der durch die Breite angegebene Anzahl von Zeichen.
Beachten Sie, dass die Buchstaben für jedes Wort in eine neue Zeile umgebrochen werden können.
pprint.pprint(l, width=1)
# [{'Age': 40,
# 'Name': 'Alice '
# 'XXX',
# 'Points': [80,
# 20]},
# {'Age': 20,
# 'Name': 'Bob '
# 'YYY',
# 'Points': [90,
# 10]},
# {'Age': 30,
# 'Name': 'Charlie '
# 'ZZZ',
# 'Points': [70,
# 30]}]
Geben Sie die Ausgabetiefe an:depth
Die Ausgabetiefe kann mit Tiefe angegeben werden. Die Tiefe bedeutet hier die Tiefe der Verschachtelung.
Elemente, die tiefer als der angegebene Wert verschachtelt sind, werden mit Auslassungspunkten … gedruckt.
pprint.pprint(l, depth=1)
# [{...}, {...}, {...}]
pprint.pprint(l, depth=2)
# [{'Age': 40, 'Name': 'Alice XXX', 'Points': [...]},
# {'Age': 20, 'Name': 'Bob YYY', 'Points': [...]},
# {'Age': 30, 'Name': 'Charlie ZZZ', 'Points': [...]}]
Der Standardwert ist Depth=None, und alle Elemente werden ausgegeben.
Sie können Breite und Tiefe gleichzeitig angeben. Die Tiefe gibt die Tiefe der Datenstruktur an, nicht die Anzahl der Zeilen. Die Zeilenumbruchpositionen hängen von der Anzahl der Zeichen ab, sterben durch width angegeben Werden.
pprint.pprint(l, depth=2, width=40)
# [{'Age': 40,
# 'Name': 'Alice XXX',
# 'Points': [...]},
# {'Age': 20,
# 'Name': 'Bob YYY',
# 'Points': [...]},
# {'Age': 30,
# 'Name': 'Charlie ZZZ',
# 'Points': [...]}]
Geben Sie die Einstiegsbreite an:indent
Die Einzugsbreite kann mit Einrückung angegeben werden. Der Standardwert ist Einrückung=1.
pprint.pprint(l, indent=4, width=4)
# [ { 'Age': 40,
# 'Name': 'Alice '
# 'XXX',
# 'Points': [ 80,
# 20]},
# { 'Age': 20,
# 'Name': 'Bob '
# 'YYY',
# 'Points': [ 90,
# 10]},
# { 'Age': 30,
# 'Name': 'Charlie '
# 'ZZZ',
# 'Points': [ 70,
# 30]}]
Zeilenumbrüche reduzieren:compact
Standardmäßig brechen alle Elemente einer Liste oder eines Wörterbuchs Zeilen, wenn sie nicht in die Breite passen.
l_long = [list(range(10)), list(range(100, 110))]
print(l_long)
# [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [100, 101, 102, 103, 104, 105, 106, 107, 108, 109]]
pprint.pprint(l_long, width=40)
# [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
# [100,
# 101,
# 102,
# 103,
# 104,
# 105,
# 106,
# 107,
# 108,
# 109]]
If compact auf True gesetzt IST, Werden Elemente, die in width pass, in Einer einzigen gedruckten Zeile. Für Listen mit vielen Elementen ist es besser, compact=True zu verwenden.
pprint.pprint(l_long, width=40, compact=True)
# [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
# [100, 101, 102, 103, 104, 105, 106,
# 107, 108, 109]]
Hinweis SIE, dass compact in Python 3.4 hinzugefügt wurde, sodass es in den bevorzugten Versionen nicht verwendet werden kann.
In Zeichenfolge umwandeln:pprint.pformat()
Wörterbücher und Listen können mit str() in den String konvertiert werden. In diesem Fall werden sie wie in der Ausgabe von print() in einen einzelnen String ohne Zeilenumbruch umgewandelt.
s_normal = str(l)
print(s_normal)
# [{'Name': 'Alice XXX', 'Age': 40, 'Points': [80, 20]}, {'Name': 'Bob YYY', 'Age': 20, 'Points': [90, 10]}, {'Name': 'Charlie ZZZ', 'Age': 30, 'Points': [70, 30]}]
print(type(s_normal))
# <class 'str'>
Sie können pprint.pformat() verwenden, um die Ausgabe von pprint.pprint() als Zeichenfolge zu erhalten.
s_pp = pprint.pformat(l)
print(s_pp)
# [{'Age': 40, 'Name': 'Alice XXX', 'Points': [80, 20]},
# {'Age': 20, 'Name': 'Bob YYY', 'Points': [90, 10]},
# {'Age': 30, 'Name': 'Charlie ZZZ', 'Points': [70, 30]}]
print(type(s_pp))
# <class 'str'>
Die Parameter von pprint.pformat() sind die gleichen wie bei pprint.pprint().
s_pp = pprint.pformat(l, depth=2, width=40, indent=2)
print(s_pp)
# [ { 'Age': 40,
# 'Name': 'Alice XXX',
# 'Points': [...]},
# { 'Age': 20,
# 'Name': 'Bob YYY',
# 'Points': [...]},
# { 'Age': 30,
# 'Name': 'Charlie ZZZ',
# 'Points': [...]}]
Beispiel: Hübsches Drucken einer Liste von Listen
Eine Liste von Listen ist mit print() schwer zu lesen, verwenden Sie also pprint.pprint().
l_2d = [list(range(10)), list(range(10)), list(range(10))]
print(l_2d)
# [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]
pprint.pprint(l_2d)
# [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]
Wie oben erwähnt, WIRD sterben Stelle, an der eine neue Zeile beginnt, durch sterben Anzahl der Zeichen bestimmt, sterben durch width angegeben Werden.
Wenn die Anzahl der Elemente klein ist, passt sie in die Standardausgabebreite width=80, es gibt auch keinen Zeilenumbruch.
l_2d = [[0, 1, 2], [3, 4, 5], [6, 7, 8]]
print(l_2d)
# [[0, 1, 2], [3, 4, 5], [6, 7, 8]]
pprint.pprint(l_2d)
# [[0, 1, 2], [3, 4, 5], [6, 7, 8]]
Wenn eine Breite angegeben WIRD, WIRD sterben Linie unterbrechen.
pprint.pprint(l_2d, width=20)
# [[0, 1, 2],
# [3, 4, 5],
# [6, 7, 8]]
Wenn Sie es als Zeichenfolge erhalten möchten, verwenden Sie pprint.pformat().
s = pprint.pformat(l_2d, width=20)
print(s)
# [[0, 1, 2],
# [3, 4, 5],
# [6, 7, 8]]
print(type(s))
# <class 'str'>