Formatieren Sie Zahlen in Python in Zeichenfolgen

112

Ich muss herausfinden, wie man Zahlen als Zeichenfolgen formatiert. Mein Code ist hier:

return str(hours)+":"+str(minutes)+":"+str(seconds)+" "+ampm

Stunden und Minuten sind ganze Zahlen, und Sekunden sind ein Float. Die Funktion str () konvertiert alle diese Zahlen in die Zehntel (0,1). Anstatt dass mein String "5: 30: 59.07 Uhr" ausgibt, wird so etwas wie "5.0: 30.0: 59.1 Uhr" angezeigt.

Fazit: Welche Bibliothek / Funktion brauche ich, um dies für mich zu tun?

David Ackerman
quelle

Antworten:

138

Ab Python 3.6 kann die Formatierung in Python mit formatierten String-Literalen oder F-Strings erfolgen :

hours, minutes, seconds = 6, 56, 33
f'{hours:02}:{minutes:02}:{seconds:02} {"pm" if hours > 12 else "am"}'

oder die str.formatFunktion ab 2.7:

"{:02}:{:02}:{:02} {}".format(hours, minutes, seconds, "pm" if hours > 12 else "am")

oder die String - Formatierung %Operator für noch ältere Versionen von Python, aber die Notiz in der Dokumentation sehen:

"%02d:%02d:%02d" % (hours, minutes, seconds)

Und für Ihren speziellen Fall der Formatierungszeit gibt es time.strftime:

import time

t = (0, 0, 0, hours, minutes, seconds, 0, 0, 0)
time.strftime('%I:%M:%S %p', t)
Konrad Rudolph
quelle
96

Ab Python 2.6 gibt es eine Alternative: die str.format()Methode. Hier einige Beispiele mit dem vorhandenen Zeichenfolgenformatoperator ( %):

>>> "Name: %s, age: %d" % ('John', 35) 
'Name: John, age: 35' 
>>> i = 45 
>>> 'dec: %d/oct: %#o/hex: %#X' % (i, i, i) 
'dec: 45/oct: 055/hex: 0X2D' 
>>> "MM/DD/YY = %02d/%02d/%02d" % (12, 7, 41) 
'MM/DD/YY = 12/07/41' 
>>> 'Total with tax: $%.2f' % (13.00 * 1.0825) 
'Total with tax: $14.07' 
>>> d = {'web': 'user', 'page': 42} 
>>> 'http://xxx.yyy.zzz/%(web)s/%(page)d.html' % d 
'http://xxx.yyy.zzz/user/42.html' 

Hier sind die entsprechenden Ausschnitte, aber mit str.format():

>>> "Name: {0}, age: {1}".format('John', 35) 
'Name: John, age: 35' 
>>> i = 45 
>>> 'dec: {0}/oct: {0:#o}/hex: {0:#X}'.format(i) 
'dec: 45/oct: 0o55/hex: 0X2D' 
>>> "MM/DD/YY = {0:02d}/{1:02d}/{2:02d}".format(12, 7, 41) 
'MM/DD/YY = 12/07/41' 
>>> 'Total with tax: ${0:.2f}'.format(13.00 * 1.0825) 
'Total with tax: $14.07' 
>>> d = {'web': 'user', 'page': 42} 
>>> 'http://xxx.yyy.zzz/{web}/{page}.html'.format(**d) 
'http://xxx.yyy.zzz/user/42.html'

Wie Python 2.6+ verstehen alle Python 3-Versionen (bisher), wie man beides macht. Ich habe dieses Zeug schamlos direkt aus meinem Hardcore-Python-Intro-Buch und den Folien für die Intro + Intermediate Python-Kurse herausgerissen, die ich von Zeit zu Zeit anbiete.:-)

August 2018 UPDATE : Natürlich, jetzt , dass wir die f-String - Funktion in 3.6 , müssen wir die entsprechenden Beispiele für das , ja eine andere Alternative:

>>> name, age = 'John', 35
>>> f'Name: {name}, age: {age}'
'Name: John, age: 35'

>>> i = 45
>>> f'dec: {i}/oct: {i:#o}/hex: {i:#X}'
'dec: 45/oct: 0o55/hex: 0X2D'

>>> m, d, y = 12, 7, 41
>>> f"MM/DD/YY = {m:02d}/{d:02d}/{y:02d}"
'MM/DD/YY = 12/07/41'

>>> f'Total with tax: ${13.00 * 1.0825:.2f}'
'Total with tax: $14.07'

>>> d = {'web': 'user', 'page': 42}
>>> f"http://xxx.yyy.zzz/{d['web']}/{d['page']}.html"
'http://xxx.yyy.zzz/user/42.html'
wescpy
quelle
8

Python 2.6+

Es ist möglich, die format()Funktion zu verwenden, sodass Sie in Ihrem Fall Folgendes verwenden können:

return '{:02d}:{:02d}:{:.2f} {}'.format(hours, minutes, seconds, ampm)

Es gibt mehrere Möglichkeiten, diese Funktion zu verwenden. Weitere Informationen finden Sie in der Dokumentation .

Python 3.6+

F-Strings ist eine neue Funktion, die der Sprache in Python 3.6 hinzugefügt wurde. Dies erleichtert das notorische Formatieren von Zeichenfolgen:

return f'{hours:02d}:{minutes:02d}:{seconds:.2f} {ampm}'
lmiguelvargasf
quelle
1

Sie können Folgendes verwenden, um die gewünschte Funktionalität zu erreichen

"%d:%d:d" % (hours, minutes, seconds)
Varun Chadha
quelle
1

Sie können str.format () verwenden, damit Python Objekte für Zeichenfolgen erkennt.

HamTheBurger
quelle
0

str () in Python auf einer Ganzzahl wird nicht jede Nachkommastellen drucken.

Wenn Sie einen Gleitkommawert haben, bei dem Sie den Dezimalteil ignorieren möchten, können Sie str (int (floatValue)) verwenden.

Vielleicht zeigt der folgende Code:

>>> str(5)
'5'
>>> int(8.7)
8
Matthew Schinckel
quelle
0

Wenn Sie einen Wert haben, der eine Dezimalstelle enthält, der Dezimalwert jedoch vernachlässigbar ist (dh: 100,0), und versuchen, dies zu int, wird eine Fehlermeldung angezeigt. Es scheint albern, aber das Aufrufen von float behebt dies zuerst.

str (int (float ([variable])))

Ruz
quelle