Formatta i numeri in stringhe in Python


112

Devo scoprire come formattare i numeri come stringhe. Il mio codice è qui:

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

Ore e minuti sono numeri interi e secondi è un float. la funzione str () convertirà tutti questi numeri al decimo (0,1) posto. Quindi, invece della mia stringa che emette "5: 30: 59.07 pm", mostrerebbe qualcosa come "5.0: 30.0: 59.1 pm".

In conclusione, di quale libreria / funzione ho bisogno per farlo per me?

Risposte:


138

A partire da Python 3.6, la formattazione in Python può essere eseguita utilizzando stringhe letterali formattate o stringhe f :

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

o la str.formatfunzione che inizia con 2.7:

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

o l' operatore di formattazione delle stringhe% anche per le versioni precedenti di Python, ma vedi la nota nei documenti:

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

E per il tuo caso specifico di tempo di formattazione, c'è time.strftime:

import time

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

96

A partire da Python 2.6, c'è un'alternativa: il str.format()metodo. Di seguito sono riportati alcuni esempi che utilizzano l'operatore di formato stringa esistente ( %):

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

Ecco gli snippet equivalenti ma utilizzando 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'

Come Python 2.6+, tutte le versioni di Python 3 (finora) capiscono come fare entrambe le cose. Ho strappato senza vergogna questa roba direttamente dal mio libro introduttivo di Python hardcore e dalle diapositive per i corsi Intro + Intermediate Python che offro di volta in volta.:-)

Agosto 2018 AGGIORNAMENTO : Certo, ora che abbiamo la funzione F-string in 3.6 , abbiamo bisogno di esempi equivalenti di che , sì, un'altra alternativa:

>>> 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+

È possibile utilizzare la format()funzione, quindi nel tuo caso puoi utilizzare:

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

Esistono diversi modi per utilizzare questa funzione, quindi per ulteriori informazioni è possibile consultare la documentazione .

Python 3.6+

f-strings è una nuova funzionalità che è stata aggiunta al linguaggio in Python 3.6. Ciò facilita notoriamente la formattazione delle stringhe:

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


1

È possibile utilizzare quanto segue per ottenere la funzionalità desiderata

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

1

Puoi usare str.format () per far riconoscere a Python qualsiasi oggetto nelle stringhe.


0

str () in python su un intero non stamperà alcuna cifra decimale.

Se hai un float di cui vuoi ignorare la parte decimale, puoi usare str (int (floatValue)).

Forse il codice seguente dimostrerà:

>>> str(5)
'5'
>>> int(8.7)
8

0

Se si dispone di un valore che include un decimale, ma il valore decimale è trascurabile (ad esempio: 100.0) e si tenta di inserirlo, verrà visualizzato un errore. Sembra sciocco, ma chiamare prima float risolve questo problema.

str (int (float ([variabile])))

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.