Python Strings mit .format()
Inhalt
Python Strings mit .format()
¶
Die Formatierung von Strings ist erstaunlich umfangreich. Wir wollen einen Überblick gewinnen. Eine komplette Einführung erscheint wegen dem Umfang als nicht zweckmäßig. Das Erlernen der String Formatierung ist mit viel Übung verbunden.
In Python gibt es 3 Wege um String Ausgaben zu formatieren.
study = 'KI'
year = 2019
print('Seit %d kann man %s an der JKU studieren!' % (year,study))
print('Seit {} kann man {} an der JKU studieren!'.format(year,study))
print(f'Seit {year} kann man {study} an der JKU studieren!')
Seit 2019 kann man KI an der JKU studieren!
Seit 2019 kann man KI an der JKU studieren!
Seit 2019 kann man KI an der JKU studieren!
Die erste Option ist die älteste und gilt mittlerweile veraltet. Diese Variante benutzt den % Operator um den String zu formatieren. Diese Variante wollen wir in diesem Buch nicht mehr benutzen.
print('Seit %d kann man %s an der JKU studieren!' % (year,study))
Seit 2019 kann man KI an der JKU studieren!
.format()
ist mit Python 3.0 eingeführt worden und gilt seitdem als Standard.
print('Seit {} kann man {} an der JKU studieren!'.format(year,study))
Seit 2019 kann man KI an der JKU studieren!
Seit Python 3.6 gibt es die sogenannten f-strings
welche sich als sehr praktische erwiesen haben. Ausgaben sind oft sehr gut lesbar.
print(f'Seit {year} kann man {study} an der JKU studieren!')
Seit 2019 kann man KI an der JKU studieren!
Warnung
Der %
Operator für String Formatierung sollte nicht mehr verwendet werden.
Basis Formatierung¶
Mit der Methode .format()
und dem Platzhalter können wir einfach Variablen in einem String einbauen.
var1='Eins'
var2='Zwei'
'{} vor {}'.format(var1, var2)
'Eins vor Zwei'
Wir können die Werte auch direkt der Methode übergeben.
'{} vor {}'.format('Eins', 'Zwei')
'Eins vor Zwei'
Wir können die Argumente vertauschen.
'{} vor {}'.format('Zwei', 'Eins')
'Zwei vor Eins'
Dieses Ergebnis können durch die Angaben {1} {0}
erreichen.
'{1} vor {0}'.format('Zwei', 'Eins')
'Eins vor Zwei'
Wir können selbstverständlich auch Zahlen verwenden.
'{} vor {}'.format(1, 2)
'1 vor 2'
'{1} vor {0}'.format(1, 2)
'2 vor 1'
Zahlen¶
Die Formatierung von Strings ist insbesondere für Zahlen hilfreich.
'{:d}'.format(2022)
'2022'
Für float
und complex
Zahlen können wir {:f}
verwenden.
'{:f}'.format(3.141592653589793)
'3.141593'
Standardmäßig werden 6 Nachkommastellen ausgegeben.
Die Nachkommastellen x
können wir {:.xf}
steuern. Wir können diese auf zum Beispiel 3 beschränkten,
'{:.3f}'.format(3.141592653589793)
'3.142'
oder auf 9 erweitern.
'{:.9f}'.format(3.141592653589793)
'3.141592654'
Auch für die komplexe Zahlen können wir {:.xf}
verwenden.
'{:.3f}'.format(1.1111+2.2222j)
'1.111+2.222j'
Zahlen auffüllen¶
Wollen wir Zahlen nach geordnet nach Dezimalstellen ausgeben, können wir das mit {:3}
erreichen.
print('{:3}'.format(3))
print('{:3}'.format(33))
print('{:3}'.format(333))
3
33
333
Zusätzlich können wir den Datentyp angeben.
print('{:3d}'.format(3))
print('{:3d}'.format(33))
print('{:3d}'.format(333))
3
33
333
Ein Auffüllen mit 0
ist möglich.
print('{:03d}'.format(3))
print('{:03d}'.format(33))
print('{:03d}'.format(333))
003
033
333
Wir können nun in Kombination die Ausgaben von Zahlen float
steuern.
print('{:04.2f}'.format(3.141592653589793))
print('{:05.2f}'.format(3.141592653589793))
print('{:06.2f}'.format(3.141592653589793))
3.14
03.14
003.14
Zahlen mit Vorzeichen¶
Manchmal ist es notwendig das Vorzeichen von Zahlen explizit darzustellen. Positive Zahlen werden ohne Vorzeichen ausgegeben.
'{}'.format(3)
'3'
Wenn wir ein +
explizit ausgeben wollen können wir das mit {:+}
erreichen.
'{:+}'.format(3)
'+3'
Das negative Vorzeichen wird automatisch ausgegeben.
'{}'.format((-3))
'-3'
Mit dem Muster {:=+5}
können wir das Vorzeichen ganz am Anfang setzen.
'{:=+5}'.format(3)
'+ 3'
'{:=5}'.format((-3))
'- 3'
Das Auffüllen mit 0
ist auch hier möglich und oft sinnvoll.
print('{:=+05}'.format(3))
print('{:=05}'.format(-3))
+0003
-0003
Auffüllen und Ausrichten von Zeichenketten¶
Mit <,>,^
ist ein steuern für das Auffüllen und das Ausrichten von Zeichenketten möglich.
Standardmäßig ist der Text nach links ausgerichtet und das Auffüllen erfolgt nach rechts.
'{:10}'.format('test')
'test '
Mit {:>10}
kann ein Text nach rechts ausgerichtet werden und das Auffüllen erfolgt nach links.
'{:>10}'.format('test')
' test'
Wir können die Leerstellen auch mit anderen Zeichen auffüllen. Dazu nutzen wir das Muster {:x<10}
mit dem Zeichen x
.
'{:!<10}'.format('test')
'test!!!!!!'
Das Muster {:x<10}
richtet den Text wieder rechts aus und füllt die Leerstellen mit dem Zeichen x
auf.
'{:_>10}'.format('test')
'______test'
Auch ein Zentrieren des Textes ist möglich. Mit dem Muster {:x^10}
können wir dies erreichen.
'{:!^10}'.format('test')
'!!!test!!!'
'{:_^7}'.format('zip')
'__zip__'
Lange Zeichenketten abschneiden¶
Das Abschneiden von Zeichenketten:
'{:.5}'.format('Mechatronik')
'Mecha'
Wir können das Abscheiden mit dem Auffüllen kombinieren.
'{:10.5}'.format('Mechatronik')
'Mecha '
Wir können das Abscheiden und das Auffüllen mit der Ausrichtung kombinieren.
'{:>10.5}'.format('Mechatronik')
' Mecha'
Benannte Platzhalter¶
Wir können den Platzhalter Werte zuweisen und so diese im String öfters verwenden.
'{last}, {first} {last}!'.format(first='James', last='Bond')
'Bond, James Bond!'
dict
können elegant mit format()
verwendet werden. Dabei werden die Schlüsselwörter als Platzhalter verwendet.
data = {'first': 'James', 'last': 'Bond'}
'{last}, {first} {last}!'.format(**data)
'Bond, James Bond!'
Zugriff auf Listen und mehr¶
Das gemeinsame Verwenden von komplexeren Datentypen mit .format()
macht das String-Formatieren oft besonders einfach.
Hier ist ein Beispiel mit list
.
odd = [1, 2, 3, 7, 11, 13]
'{d[4]} {d[5]}'.format(d=odd)
'11 13'
Hier ist ein Beispiel mit dict
.
person = {'first': 'James', 'last': 'Bond'}
'{p[first]} {p[last]}'.format(p=person)
'James Bond'
Ein Beispiel wie wir die .format()
Methode gemeinsam mit einer selbstgeschriebenen Klasse verwenden können.
Der String ist sehr gut lesbar.
class Car(object):
name = 'Tesla'
year = 2019
price = {'black': 30000, 'blue': 35000}
print('Marke: {p.name} \nJahr: {p.year} \nPreis: {p.price[black]}'.format(p=Car()))
Marke: Tesla
Jahr: 2019
Preis: 30000
Datetime¶
Der Datetime Datentype ist für Zeitreihenanalysen von besonderer Bedeutung. Gerade gemeinsam mit Pandas ist dieser Datentype kaum zu überschätzen. Wir können auch die .format()
verwenden um die Formatierung in einem String zu verändern.
from datetime import datetime
print(datetime(2001, 2, 3, 4, 5))
2001-02-03 04:05:00
'{:%Y-%m-%d %H:%M}'.format(datetime(2001, 2, 3, 4, 5))
'2001-02-03 04:05'
'{:%d-%m-%Y %H:%M}'.format(datetime(2001, 2, 3, 4, 5))
'03-02-2001 04:05'