Formatierung 2

Einführung

Die str.format() Methode der String- Klasse von Python ermöglicht das str.format() von Variablenund die Formatierung von Werten. Auf diese Weise können Sie Elemente durch Positionsformatierung innerhalb einer Zeichenfolge miteinander verketten .

In diesem Lernprogramm werden Sie durch einige der häufigsten Verwendungsmöglichkeiten von Formatierungsprogrammen in Python geführt, mit denen Sie Code und Programm lesbarer und benutzerfreundlicher gestalten können.

Formatters verwenden

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

Lassen Sie uns eine Zeichenfolge ausdrucken, die ein Formatierungsprogramm verwendet:

 print("Sammy has {} balloons.".format(5)) 
Ausgabe
  Sammy hat 5 Ballons.

Im obigen Beispiel haben wir einen String mit einem Paar geschweifte Klammern als Platzhalter konstruiert:

 "Sammy has {} balloons." 

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

 Sammy has 5 balloons. 

Wir können eine Variable auch so zuweisen, dass sie dem Wert einer Zeichenfolge mit Formatierungsplatzhaltern entspricht:

 open_string = "Sammy loves {}." print(open_string.format("open source")) 
Ausgabe
  Sammy liebt 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 Formattern in Python können Sie geschweifte Klammern als Platzhalter für Werte verwenden, die Sie mit der str.format() -Methode übergeben.

Verwenden von Formatters mit mehreren Platzhaltern

Sie können mehrere Paare geschweifte Klammern verwenden, wenn Sie Formatierer verwenden. Wenn Sie dem obigen Satz eine weitere Variablensubstitution hinzufügen möchten, können Sie dies tun, indem Sie ein zweites Paar geschweifte 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 
Ausgabe
  Sammy liebt Open-Source-Software.

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

Mit derselben 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 
Ausgabe
  Sammy liebt Open-Source-Software und hat 5 Ballons.

In sammy_string wir 4 Paare geschweifte Klammern als Platzhalter für die Variablensubstitution hinzugefügt. Wir haben dann 4 Werte an die str.format() -Methode übergeben und dabei Datentypen mit Zeichenfolge und Ganzzahl gemischt. Jeder dieser Werte ist durch ein Komma getrennt.

Formatierer mit Positions- und Schlüsselwortargumenten umsortieren

Wenn geschweifte Klammern ohne Parameter leer str.format() , ersetzt Python die durch die str.format() -Methode übergebenen Werte der str.format() . Wie wir bisher gesehen haben, sieht eine Formatiererkonstruktion mit zwei leeren geschweiften Klammern mit zwei durchgelassenen Werten folgendermaßen aus:

 print("Sammy the {} has a pet {}!".format("shark", "pilot fish")) 
Ausgabe
  Sammy, der Hai, hat einen Haustier-Pilotfisch!

Das erste Paar geschweifte Klammern wird durch den Stringwert "shark" , und das zweite Paar wird durch den Stringwert "pilot fish" .

Die Werte, die in der Methode vorhanden sind, sehen folgendermaßen aus:

 ("shark", "pilot fish") 

Sie sind im Wesentlichen der Datentyp des Tupels, und jeder einzelne Wert, der im Tupel enthalten ist, kann anhand seiner Indexnummer aufgerufen werden, die mit der Indexnummer 0 beginnt.

Wir können diese Indexnummern in geschweifte 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 erhalten Sie die Ausgabe, ohne Indexnummern in die geschweiften Klammern zu geben, wenn Sie die Werte im Tupel in der folgenden Reihenfolge aufrufen:

Ausgabe
  Sammy, der Hai, hat einen Haustier-Pilotfisch!

Wenn wir jedoch die Indexnummern mit den Parametern der Platzhalter umkehren, können wir die Werte umkehren, die in den String übergeben werden:

 print("Sammy the {1} has a pet {0}!".format("shark", "pilot fish")) 
Ausgabe
  Sammy der Pilotfisch hat einen Tierhai!

Wenn Sie in einem Tupel eine Indexnummer von 2 aufrufen, die Werte an den Indexpositionen 0 und 1 enthält, rufen Sie einen Wert auf, der außerhalb des gültigen Bereichs liegt. Wenn Sie eine Indexnummer aufrufen, die außerhalb des gültigen Bereichs liegt, erhalten Sie eine Fehlermeldung:

 print("Sammy the {2} has a pet {1}!".format("shark", "pilot fish")) 
Ausgabe
  IndexError: Tupelindex außerhalb des Bereichs

Die Fehlermeldung, die wir sehen, bezieht sich darauf, dass das Tupel nur Werte bei den Indexnummern 0 und 1 hat, wodurch 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 können, wie wir Formatierer etwas besser umordnen können. Zunächst eine neue Zeichenfolge mit vier Platzhaltern:

 print("Sammy is a {}, {}, and {} {}!".format("happy", "smiling", "blue", "shark")) 
Ausgabe
  Sammy ist ein fröhlicher, lächelnder und blauer Hai!

Ohne Parameter werden die Werte, die an die str.format() -Methode übergeben werden, in der Reihenfolge in der Zeichenfolge verkettet.

Die im Tupel enthaltenen Zeichenfolgenwerte entsprechen den folgenden Indexnummern:

"glücklich" "lächelnd" "Blau" "Hai"
0 1 2 3

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

 print("Sammy is a {3}, {2}, and {1} {0}!".format("happy", "smiling", "blue", "shark")) 
Ausgabe
  Sammy ist ein Hai, blau und lächelt glücklich!

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

Neben Positionsargumenten können Sie 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")) 
Ausgabe
  Sammy, der Hai, machte eine Pull-Anfrage.

Dieses Beispiel zeigt die Verwendung eines Schlüsselwortarguments, das mit Positionsargumenten verwendet wird. Wir können das Keyword-Argument pr neben den positionellen Argumenten pr und diese Argumente verschieben, um die resultierende Zeichenfolge zu ändern:

 print("Sammy the {pr} {1} a {0}.".format("shark", "made", pr = "pull request")) 
Ausgabe
  Sammy die Pull-Anfrage machte einen Hai.

Positions- und Schlüsselwortargumente, die bei Stringformatierern verwendet werden, geben uns mehr Kontrolle über die Bearbeitung unserer Originalstrings durch Umordnen.

Typ angeben

Wir können mehr Parameter in die geschweiften Klammern unserer Syntax einfügen. Wir verwenden die {field_name:conversion} Syntax {field_name:conversion} , wobei field_name die Indexnummer des Arguments für die Methode str.format() , die wir im Abschnitt zur Neuordnungdurchlaufen haben. Die conversion bezieht sich auf den Konvertierungscode der Daten Typ, den Sie mit dem Formatierer verwenden.

Der Konvertierungstyp bezieht sich auf den Code, der von Python verwendet wird. Die Codes, die wir hier verwenden werden, sind s für string, d zur Anzeige von Dezimalzahlen (10-Basis) und f denen wir Fließkommas mit Dezimalstellen anzeigen. In der offiziellen Dokumentation von Python 3 können Sie mehr über die Mini-Sprache für die Formatspezifikation erfahren .

Sehen wir uns ein Beispiel an, bei dem eine Ganzzahl durch die Methode geleitet wird, sie jedoch als Float angezeigt werden soll, indem das Argument f Umwandlungstyp hinzugefügt wird:

 print("Sammy ate {0:f} percent of a {1}!".format(75, "pizza")) 
Ausgabe
  Sammy aß 75.000000 Prozent einer Pizza!

Wir haben die Syntax von {field_name:conversion} für das erste geschweifte Klammer-Ersetzungsfeld verwendet, um einen Float auszugeben. Die zweiten geschweiften Klammern verwenden nur den ersten Parameter {field_name} .

Im obigen Beispiel werden viele Zahlen hinter dem Dezimalzeichen angezeigt. Sie können diese jedoch einschränken. Wenn Sie f für Gleitkommawerte angeben, können Sie zusätzlich die Genauigkeit dieses Werts durch Hinzufügen eines Punktes angeben . gefolgt von der Anzahl der Ziffern nach dem Dezimalzeichen, das Sie eingeben möchten.

Wenn Sammy 75,765367% der Pizza gegessen hat, wir aber keine hohe Genauigkeit benötigen, können wir die Nachkommastellen auf 3 beschränken, indem Sie vor dem Konvertierungstyp .3 vor dem Umsetzungsart .3 hinzufügen:

 print("Sammy ate {0:.3f} percent of a pizza!".format(75.765367)) 
Ausgabe
  Sammy aß 75,765 Prozent einer Pizza!

Wenn wir nur eine Dezimalstelle wünschen, können wir die Zeichenfolge und Methode wie folgt umschreiben:

 print("Sammy ate {0:.1f} percent of a pizza!".format(75.765367)) 
Ausgabe
  Sammy aß 75,8 Prozent einer Pizza!

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

Obwohl wir eine Zahl ohne Dezimalstellen als Gleitkommazahl anzeigen, wird beim Versuch, die Gleitkommazahl mithilfe des Konvertierungstyps d in eine Ganzzahl zu ändern, ein Fehler ausgegeben:

 print("Sammy ate {0:d} percent of a pizza!".format(75.765367)) 
Ausgabe
  ValueError: Unbekannter Formatcode 'd' für Objekt vom Typ 'float'

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

 print("Sammy ate {0:.0f} percent of a pizza!".format(75.765367)) 
Ausgabe
  Sammy aß 76 Prozent einer Pizza!

Dadurch wird Ihr Float nicht in eine Ganzzahl konvertiert , sondern die Anzahl der nach dem Dezimalzeichen angezeigten Stellen wird begrenzt.

Auffüllen von Variablenersetzungen

Da es sich bei den Platzhaltern um Ersatzfelder handelt, können Sie Platz für ein Element auffüllen oder erstellen, indem Sie die Feldgröße durch zusätzliche Parameter erhöhen. Dies kann nützlich sein, wenn viele Daten visuell organisiert werden müssen.

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

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

In dem obigen Beispiel haben wir der Zahl 5 eine Zeichenfeldgröße von 4 und die Zeichenfolgenballone eine Zeichenfeldgröße von 16 gegeben (weil es sich um eine lange Zeichenfolge handelt).

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

Lassen Sie uns die Zahl linksbündig ausrichten und die Zeichenfolge zentrieren:

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

Jetzt sehen wir, dass 5 linksbündig ist und Platz im Feld vor red bietet, und balloons in seinem Feld mit dem Raum links und rechts davon zentriert sind.

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 Zeichen angeben, das direkt auf den Doppelpunkt folgen soll:

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

Wir akzeptieren den String, der an str.format() in der str.format() 0 übergeben wird, da wir nichts anderes angegeben haben, einschließlich des Doppelpunkts, und angeben, dass wir * anstelle von Leerzeichen verwenden, um das Feld auszufüllen. Wir zentrieren die Zeichenkette mit ^ , geben an, dass das Feld 20 Zeichen groß ist, und zeigt auch an, dass wir mit einem Zeichenfolgen-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)) 
Ausgabe
  Sammy aß 76 Prozent einer Pizza!

In den Parametern innerhalb der geschweiften Klammern haben wir die Indexfeldnummer des Gleitkommas angegeben und den Doppelpunkt angegeben, die Größe der Feldnummer und den Punkt angegeben, die Anzahl der Stellen nach der Dezimalstelle angegeben und dann die Zahl angegeben Umrechnungsart von f .

Verwenden von Variablen

Bisher haben wir Ganzzahlen, str.format() und Strings an die str.format() -Methode ü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)) 
Ausgabe
  Sammy hat heute 8 Ballons!

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

 sammy = "Sammy has {} balloons today!" nBalloons = 8 print(sammy.format(nBalloons)) 
Ausgabe
  Sammy hat heute 8 Ballons!

Variablen können leicht für jeden Teil unserer Formatierungssyntaxkonstruktion ersetzt werden. Dies erleichtert die Arbeit, wenn wir vom Benutzer eingegebene Eingaben übernehmen und diese Werte Variablen zuweisen.

Verwenden von Formatters zum Organisieren von Daten

Formatters zeigen sich im besten Licht, wenn sie verwendet werden, um viele Daten visuell zu organisieren. Wenn wir Benutzern Datenbanken anzeigen, kann die Ausgabe durch Formatierer zur Erhöhung der Feldgröße und zum Ändern der Ausrichtung lesbarer werden.

Schauen wir uns eine typische for-Schleife in Python an, die i , i*i und i*i*i im Bereich von 3 bis 12 ausgeben wird:

 for i in range(3,13): print(i, i*i, i*i*i) 
Ausgabe
  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

Während die Ausgabe in einer Weise organisiert ist, laufen die Zahlen in die Spalten der jeweils anderen Spalte über, wodurch der untere Rand der Ausgabe weniger lesbar wird. 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 dKonvertierungstyp, da wir mit Ganzzahlen arbeiten. In diesem Beispiel haben wir die Größe der erwarteten Ausgabe berücksichtigt und je nach maximaler Anzahl der Zahlen 2 zusätzliche Zeichen für jedes Zeichen angegeben, sodass unsere Ausgabe folgendermaßen aussieht:

Ausgabe
  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öße angeben, um gerade Spalten zu haben, um sicherzustellen, dass die größeren Zahlen berücksichtigt werden:

 for i in range(3,13): print("{:6d} {:6d} {:6d}".format(i, i*i, i*i*i)) 
Ausgabe
  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

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

Fazit

Die Verwendung von Formatierungsprogrammen für die Variablensubstitution kann eine effektive Möglichkeit sein, Zeichenfolgen zu verketten und Werte und Daten zu organisieren.Formatierungsprogramme stellen eine einfache, aber nicht beschreibende Methode dar, um Variablensubstitutionen in einen String zu übergeben, und sie stellen sicher, dass die Ausgabe lesbar und benutzerfreundlich ist.