So verwenden Sie String-Formatierer in Python 3

Einführung

Pythons + str.format () + - Methode der string -Klasse ermöglicht es Ihnen, https: // www.digitalocean.com/community/tutorials/how-to-use-variables-in-python-3[variable] Ersetzungen und Wertformatierung. Auf diese Weise können Sie mit https://www.digitalocean.com/community/tutorials/an-einführung-zum-arbeiten-mit-Strings-inpython-3#String-Verkettung] Elemente innerhalb eines Strings durch Positionsformatierung zusammenfassen.

Dieses Tutorial führt Sie durch einige der häufigsten Verwendungen von Formatierern in Python, mit denen Sie Ihren Code und Ihr Programm lesbarer und benutzerfreundlicher gestalten können.

Formatierer verwenden

Formatierer arbeiten, indem sie ein oder mehrere * Ersatzfelder * oder Platzhalter - definiert durch ein Paar geschweifter Klammern + {} + - in einen String einfügen und die Methode + str.format () + aufrufen. Sie übergeben der Methode den Wert, den Sie mit der Zeichenfolge verknüpfen möchten. Dieser Wert wird an der Stelle durchgereicht, an der sich Ihr Platzhalter befindet, wenn Sie das Programm ausführen.

Lassen Sie uns einen String ausdrucken, der einen Formatierer verwendet:

print("Sammy has {} balloons.".format(5))
OutputSammy has 5 balloons.

Im obigen Beispiel haben wir eine Zeichenfolge mit zwei geschweiften Klammern als Platzhalter erstellt:

"Sammy has {} balloons."

Wir haben dann die Methode "+ str.format () " hinzugefügt und den Wert der Ganzzahl " 5 " an diese Methode übergeben. Dadurch wird der Wert von " 5 +" in die Zeichenfolge eingefügt, in der sich die geschweiften Klammern befanden:

Sammy has 5 balloons.

Wir können auch eine Variable zuweisen, die dem Wert eines Strings mit Platzhaltern für Formatierer entspricht:

open_string = "Sammy loves {}."
print(open_string.format("open source"))
OutputSammy loves open source.

In diesem zweiten Beispiel haben wir die Zeichenfolge "" Open Source "" mit der größeren Zeichenfolge verkettet und die geschweiften Klammern in der ursprünglichen Zeichenfolge ersetzt.

Mit Formatierern in Python können Sie geschweifte Klammern als Platzhalter für Werte verwenden, die Sie mit der Methode "+ str.format () +" übergeben.

Verwenden von Formatierern mit mehreren Platzhaltern

Sie können mehrere geschweifte Klammernpaare verwenden, wenn Sie Formatierer verwenden. Wenn wir dem obigen Satz eine weitere variable Substitution hinzufügen möchten, können wir dies tun, indem wir ein zweites Paar geschweifter Klammern hinzufügen und einen zweiten Wert an die Methode übergeben:

new_open_string = "Sammy loves {} {}."                      #2 {} placeholders
print(new_open_string.format("open-source", "software"))    #Pass 2 strings into method, separated by a comma
OutputSammy loves open-source software.

Um eine weitere Ersetzung hinzuzufügen, haben wir der ursprünglichen Zeichenfolge ein zweites Paar geschweifte Klammern hinzugefügt. Dann haben wir zwei Strings in die Methode + str.format () + übergeben und sie durch ein Komma getrennt.

Nach der gleichen Syntax können wir zusätzliche Ersetzungen hinzufügen:

sammy_string = "Sammy loves {} {}, and has {} {}."                      #4 {} placeholders
print(sammy_string.format("open-source", "software", 5, "balloons"))    #Pass 4 strings into method
OutputSammy loves open-source software, and has 5 balloons.

In + sammy_string + haben wir 4 Paar geschweifte Klammern als Platzhalter für die variable Substitution hinzugefügt. Wir haben dann 4 Werte an die Methode + str.format () + übergeben und die Datentypen string und integer gemischt. Jeder dieser Werte ist durch ein Komma getrennt.

Formatierer mit Positions- und Schlüsselwortargumenten neu anordnen

Wenn wir geschweifte Klammern ohne Parameter leer lassen, ersetzt Python die Werte, die durch die Methode + str.format () + in der angegebenen Reihenfolge übergeben wurden. Wie wir bisher gesehen haben, sieht eine Formatierungskonstruktion mit zwei leeren geschweiften Klammern mit zwei durchlaufenden Werten folgendermaßen aus:

print("Sammy the {} has a pet {}!".format("shark", "pilot fish"))
OutputSammy the shark has a pet pilot fish!

Das erste Paar geschweifter Klammern wird durch den String-Wert "" shark "" ersetzt, und das zweite Paar wird durch den String-Wert "" pilot fish "" ersetzt.

Die in der Methode vorhandenen Werte sehen folgendermaßen aus:

("shark", "pilot fish")

Es handelt sich im Wesentlichen um den Datentyp tuple, und jeder einzelne Wert im Tupel kann über seine Indexnummer aufgerufen werden, die beginnt mit der Indexnummer 0.

Wir können diese Indexnummern an die geschweiften Klammern übergeben, die als Platzhalter in der ursprünglichen Zeichenfolge dienen:

print("Sammy the {0} has a pet {1}!".format("shark", "pilot fish"))

Im obigen Beispiel ist die Ausgabe das, was wir erhalten, ohne Indexnummern in geschweiften Klammern zu übergeben, wenn wir die Werte im Tupel in der folgenden Reihenfolge aufrufen:

OutputSammy the shark has a pet pilot fish!

Wenn wir jedoch die Indexnummern mit den Parametern der Platzhalter umkehren, können wir die in die Zeichenfolge übergebenen Werte umkehren:

print("Sammy the {1} has a pet {0}!".format("shark", "pilot fish"))
OutputSammy the pilot fish has a pet shark!

Wenn Sie in einem Tupel eine Indexnummer 2 mit Werten an den Indexpositionen 0 und 1 aufrufen, rufen Sie einen Wert auf, der außerhalb des Bereichs liegt. Wenn Sie eine Indexnummer anrufen, die außerhalb des gültigen Bereichs liegt, wird eine Fehlermeldung angezeigt:

print("Sammy the {2} has a pet {1}!".format("shark", "pilot fish"))
OutputIndexError: tuple index out of range

Die angezeigte Fehlermeldung bezieht sich darauf, dass das Tupel nur Werte mit den Indexnummern 0 und 1 enthält und daher die Indexnummer 2 außerhalb des Bereichs liegt.

Fügen wir ein paar weitere Platzhalter und ein paar weitere Werte hinzu, die an sie übergeben werden sollen, damit wir verstehen, wie wir Formatierer ein wenig besser neu anordnen können. Hier ist zunächst eine neue Zeichenfolge mit vier Platzhaltern:

print("Sammy is a {}, {}, and {} {}!".format("happy", "smiling", "blue", "shark"))
OutputSammy is a happy, smiling and blue shark!

Ohne Parameter werden die Werte, die an die Methode + str.format () + übergeben werden, der Reihe nach in die Zeichenfolge eingebunden.

Die im Tupel enthaltenen Zeichenfolgenwerte entsprechen den folgenden Indexnummern:

“happy” “smiling” “blue” “shark”

0

1

2

3

Verwenden Sie die Indexnummern der Werte, um die Reihenfolge zu ändern, in der sie in der Zeichenfolge angezeigt werden:

print("Sammy is a {3}, {2}, and {1} {0}!".format("happy", "smiling", "blue", "shark"))
OutputSammy is a shark, blue, and smiling happy!

Da wir mit Index Nummer 3 angefangen haben, haben wir zuerst den letzten Wert von " shark " aufgerufen. Die anderen als Parameter enthaltenen Indexnummern ändern die Reihenfolge, in der die Wörter in der ursprünglichen Zeichenfolge angezeigt werden.

Zusätzlich zu Positionsargumenten können wir auch Schlüsselwortargumente einführen, die nach ihrem Schlüsselwortnamen aufgerufen werden:

print("Sammy the {0} {1} a {pr}.".format("shark", "made", pr = "pull request"))
OutputSammy the shark made a pull request.

Dieses Beispiel zeigt die Verwendung eines Schlüsselwortarguments, das mit Positionsargumenten verwendet wird. Wir können das Schlüsselwortargument "+ pr +" neben Positionsargumenten eingeben und diese Argumente verschieben, um die resultierende Zeichenfolge zu ändern:

print("Sammy the {pr} {1} a {0}.".format("shark", "made", pr = "pull request"))
OutputSammy the pull request made a shark.

Mit Zeichenfolgenformatierern verwendete Positions- und Schlüsselwortargumente geben uns mehr Kontrolle über die Manipulation unserer ursprünglichen Zeichenfolgen durch Neuanordnen.

Typ angeben

Wir können weitere Parameter in die geschweiften Klammern unserer Syntax einfügen. Wir verwenden die Formatcodesyntax "+ {field_name: conversion} ", wobei " field_name " die Indexnummer des Arguments für die " str.format () " - Methode angibt, die wir in https durchlaufen haben: //www.digitalocean.com/community/tutorials/how-to-use-string-formatters-in-python-3#reordering-formatters-with-positional-and-keyword-arguments[reordering section] und ` conversion + `bezieht sich auf den Konvertierungscode des Datentyps, den Sie mit dem Formatierer verwenden.

Der Konvertierungstyp bezieht sich auf den von Python verwendeten Ein-Zeichen-Typcode. Die Codes, die wir hier verwenden werden, sind "+ s " für Zeichenfolge, " d " für die Anzeige von Dezimalzahlen (10-Basis) und " f +" für die Anzeige von Gleitkommazahlen mit Dezimalstellen. Weitere Informationen zu Format-Specification Mini-Language finden Sie in der offiziellen Dokumentation zu Python 3.

Schauen wir uns ein Beispiel an, in dem eine Ganzzahl durch die Methode geleitet wird, diese aber als Gleitkommazahl angezeigt werden soll, indem das Argument "+ f +" für den Konvertierungstyp hinzugefügt wird:

print("Sammy ate {0:f} percent of a {1}!".format(75, "pizza"))
OutputSammy ate 75.000000 percent of a pizza!

Wir haben die Syntax von + {field_name: conversion} + für das erste Ersatzfeld für geschweifte Klammern verwendet, um einen Gleitkomma auszugeben. Die zweite geschweifte Klammer verwendet nur den ersten Parameter + {field_name} +.

Im obigen Beispiel werden viele Zahlen nach dem Komma angezeigt, aber Sie können diese einschränken. Wenn Sie "+ f " für Gleitkommawerte angeben, können Sie zusätzlich die Genauigkeit dieses Werts angeben, indem Sie einen Punkt ". +" Gefolgt von der Anzahl der Nachkommastellen, die Sie einschließen möchten, einfügen.

Wenn Sammy 75,765367% der Pizza gegessen hat, wir aber keine hohe Genauigkeit benötigen, können wir die Nachkommastellen durch Hinzufügen von "+ .3 " vor dem Umwandlungstyp " f +" auf 3 begrenzen:

print("Sammy ate {0:.3f} percent of a pizza!".format(75.765367))
OutputSammy ate 75.765 percent of a pizza!

Wenn wir nur eine Dezimalstelle wollen, können wir den String und die Methode wie folgt umschreiben:

print("Sammy ate {0:.1f} percent of a pizza!".format(75.765367))
OutputSammy ate 75.8 percent of a pizza!

Beachten Sie, dass durch Ändern der Genauigkeit die Zahl gerundet wird.

Obwohl wir eine Zahl ohne Dezimalstellen als Gleitkommazahl anzeigen, erhalten wir eine Fehlermeldung, wenn wir versuchen, die Gleitkommazahl mithilfe des Konvertierungstyps "+ d +" in eine Ganzzahl umzuwandeln:

print("Sammy ate {0:d} percent of a pizza!".format(75.765367))
OutputValueError: Unknown format code 'd' for object of type 'float'

Wenn Sie möchten, dass keine Nachkommastellen angezeigt werden, können Sie Ihren Formatierer folgendermaßen schreiben:

print("Sammy ate {0:.0f} percent of a pizza!".format(75.765367))
OutputSammy ate 76 percent of a pizza!

Dies wird nicht convertieren Sie Ihren Float in eine Ganzzahl, sondern begrenzen die Anzahl der Stellen nach dem Komma.

Variable Substitutionen auffüllen

Da es sich bei den Platzhaltern um Ersatzfelder handelt, können Sie Platz um ein Element schaffen, indem Sie die Feldgröße durch zusätzliche Parameter erhöhen. Dies kann nützlich sein, wenn wir viele Daten visuell organisieren müssen.

Wir können eine Zahl hinzufügen, um die Feldgröße (in Zeichen) nach dem Doppelpunkt "+: +" in den geschweiften Klammern unserer Syntax anzugeben:

print("Sammy has {0:4} red {1:16}!".format(5, "balloons"))
OutputSammy has    5 red balloons        !

Im obigen Beispiel haben wir die Zahl "+ 5 ", eine Zeichenfeldgröße von 4, und die Zeichenfolge " Sprechblasen auf", eine Zeichenfeldgröße von 16 (da es sich um eine lange Zeichenfolge handelt).

Wie wir sehen, sind Zeichenfolgen innerhalb des Feldes standardmäßig linksbündig und Zahlen rechtsbündig. Sie können dies ändern, indem Sie einen Ausrichtungscode direkt nach dem Doppelpunkt einfügen. + <+ richtet den Text in einem Feld links aus, + ^ + zentriert den Text im Feld und +> + richtet ihn rechts aus.

Lassen Sie uns die Zahl links ausrichten und die Zeichenfolge zentrieren:

print("Sammy has {0:<4} red {1:^16}!".format(5, "balloons"))
OutputSammy has 5    red     balloons    !

Jetzt sehen wir, dass "+ 5 " linksbündig ausgerichtet ist und Platz im Feld vor " rot " bietet, und " Luftballons +" in seinem Feld zentriert ist, wobei links und rechts davon Platz ist.

Wenn wir ein Feld mit Formatierern vergrößern, füllt Python das Feld standardmäßig mit Leerzeichen. Wir können das ändern, um ein anderes Zeichen zu sein, indem wir das gewünschte Zeichen direkt nach dem Doppelpunkt angeben:

print("{:*^20s}".format("Sammy"))
Output*******Sammy********

Wir akzeptieren, dass die Zeichenfolge an der Indexposition 0 an "+ str.format () " übergeben wird, da wir nichts anderes angegeben haben, einschließlich des Doppelpunkts, und dass wir " * " anstelle des Leerzeichens zum Füllen verwenden das Feld hinauf. Wir zentrieren den String mit " ^ ", geben an, dass das Feld 20 Zeichen groß ist, und geben an, dass wir mit einem String-Konvertierungstyp arbeiten, indem wir " s +" einschließen.

Wir können diese Parameter mit anderen Parametern kombinieren, die wir zuvor verwendet haben:

print("Sammy ate {0:5.0f} percent of a pizza!".format(75.765367))
OutputSammy ate    76 percent of a pizza!

In den Parametern innerhalb der geschweiften Klammern haben wir die Indexfeldnummer des Gleitkommas und den Doppelpunkt angegeben, die Größe der Feldnummer angegeben und den Punkt eingeschlossen, die Anzahl der Nachkommastellen angegeben und dann die Umwandlungstyp von + f +.

Variablen verwenden

Bisher haben wir ganze Zahlen, Gleitkommazahlen und Zeichenfolgen an die Methode + str.format () + übergeben, aber wir können auch Variablen durch die Methode übergeben. Dies funktioniert genauso wie jede andere Variable.

nBalloons = 8
print("Sammy has {} balloons today!".format(nBalloons))
OutputSammy has 8 balloons today!

Wir können Variablen sowohl für die ursprüngliche Zeichenfolge als auch für das verwenden, was an die Methode übergeben wird:

sammy = "Sammy has {} balloons today!"
nBalloons = 8
print(sammy.format(nBalloons))
OutputSammy has 8 balloons today!

Variablen können für jeden Teil unserer Formatierungssyntaxkonstruktion einfach ersetzt werden. Dies erleichtert die Arbeit, wenn wir benutzergenerierte Eingaben erfassen und diese Werte Variablen zuweisen.

Verwenden von Formatierern zum Organisieren von Daten

Formatierer können in ihrem besten Licht gesehen werden, wenn sie verwendet werden, um viele Daten auf visuelle Weise zu organisieren. Wenn wir Benutzern Datenbanken anzeigen, kann die Lesbarkeit Ihrer Ausgabe durch die Verwendung von Formatierern zur Vergrößerung der Felder und zur Änderung der Ausrichtung verbessert werden.

Schauen wir uns ein typisches for loop in Python an, das "+ i +", "ausgibt + i * i + und + i * i * i + `im Bereich von 3 bis 12:

for i in range(3,13):
   print(i, i*i, i*i*i)
Output3 9 27
4 16 64
5 25 125
6 36 216
7 49 343
8 64 512
9 81 729
10 100 1000
11 121 1331
12 144 1728

Während die Ausgabe so organisiert ist, laufen die Zahlen in den Spalten der jeweils anderen über, sodass der untere Rand der Ausgabe weniger lesbar ist. Wenn Sie mit einem größeren Datensatz mit vielen kleinen und großen Zahlen arbeiten, kann dies ein Problem darstellen.

Verwenden wir Formatierer, um diesen Zahlen mehr Platz zu geben:

for i in range(3,13):
   print("{:3d} {:4d} {:5d}".format(i, i*i, i*i*i))

In unseren geschweiften Klammern haben wir den Feldnamen für die Indexnummer nicht hinzugefügt und mit dem Doppelpunkt begonnen, gefolgt von der Nummer für die Feldgröße und einem "+ d +" - Konvertierungstyp, da wir mit ganzen Zahlen arbeiten. In diesem Beispiel haben wir die Größe jeder erwarteten Ausgabe berücksichtigt und je nach der maximal möglichen Zahlengröße 2 zusätzliche Zeichen für jede Ausgabe angegeben. Unsere Ausgabe sieht also folgendermaßen aus:

Output  3    9    27
 4   16    64
 5   25   125
 6   36   216
 7   49   343
 8   64   512
 9   81   729
10  100  1000
11  121  1331
12  144  1728

Wir können eine konsistente Feldgrößennummer angeben, um gerade Spalten zu erhalten, und dabei sicherstellen, dass wir die größeren Zahlen berücksichtigen:

for i in range(3,13):
   print("{:6d} {:6d} {:6d}".format(i, i*i, i*i*i))
Output     3      9     27
    4     16     64
    5     25    125
    6     36    216
    7     49    343
    8     64    512
    9     81    729
   10    100   1000
   11    121   1331
   12    144   1728

Wir können auch die Ausrichtung der Spalten ändern, indem wir + <+, + ^ + und +> + für die Textausrichtung hinzufügen. Ändern Sie + d + zu + f +, um Dezimalstellen hinzuzufügen, und ändern Sie das Feld Benennen Sie Indexnummern und vieles mehr, um sicherzustellen, dass die Daten so angezeigt werden, wie wir möchten.

Fazit

Die Verwendung von Formatierern für die Variablensubstitution kann eine effektive Möglichkeit sein, Zeichenfolgen zu verketten und Werte und Daten zu organisieren. Formatierer stellen eine einfache, aber nicht beschreibende Methode zum Übergeben von Variablensubstitutionen in eine Zeichenfolge dar und sind nützlich, um sicherzustellen, dass die Ausgabe lesbar und benutzerfreundlich ist.