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?

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)

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'

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}'


1

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

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

1

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


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

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])))

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.