Mettre en forme les nombres en chaînes en Python

112

J'ai besoin de savoir comment formater les nombres sous forme de chaînes. Mon code est ici:

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

Les heures et les minutes sont des nombres entiers et les secondes sont des flottants. la fonction str () convertira tous ces nombres en dixièmes (0,1). Ainsi, au lieu que ma chaîne affiche "5: 30: 59.07 pm", elle afficherait quelque chose comme "5.0: 30.0: 59.1 pm".

En bout de ligne, de quelle bibliothèque / fonction ai-je besoin pour faire cela pour moi?

David Ackerman
la source

Réponses:

138

À partir de Python 3.6, le formatage en Python peut être effectué à l'aide de littéraux de chaîne formatés ou de chaînes f :

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

ou la str.formatfonction commençant par 2.7:

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

ou l' opérateur de mise en forme de chaîne% pour les versions encore plus anciennes de Python, mais consultez la note dans la documentation:

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

Et pour votre cas spécifique de temps de formatage, il y a time.strftime:

import time

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

À partir de Python 2.6, il existe une alternative: la str.format()méthode. Voici quelques exemples utilisant l'opérateur de format de chaîne existant ( %):

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

Voici les extraits équivalents mais en utilisant 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'

Comme Python 2.6+, toutes les versions de Python 3 (jusqu'à présent) comprennent comment faire les deux. J'ai arraché sans vergogne ce truc directement de mon livre d'intro hardcore Python et des diapositives pour les cours Intro + Intermediate Python que je propose de temps en temps.:-)

Août 2018 Mise à jour : Bien sûr, maintenant que nous avons la fonction f-chaîne en 3.6 , nous avons besoin des exemples équivalents que , oui une autre 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
la source
8

Python 2.6+

Il est possible d'utiliser la format()fonction, donc dans votre cas, vous pouvez utiliser:

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

Il existe plusieurs façons d'utiliser cette fonction, donc pour plus d'informations, vous pouvez consulter la documentation .

Python 3.6+

f-strings est une nouvelle fonctionnalité qui a été ajoutée au langage dans Python 3.6. Cela facilite notoirement le formatage des chaînes:

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

Vous pouvez utiliser les éléments suivants pour obtenir la fonctionnalité souhaitée

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

Vous pouvez utiliser str.format () pour que Python reconnaisse tous les objets en chaînes.

JambonTheBurger
la source
0

str () en python sur un entier va pas imprimer les décimales.

Si vous avez un flottant dont vous souhaitez ignorer la partie décimale, vous pouvez utiliser str (int (floatValue)).

Peut-être que le code suivant démontrera:

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

Si vous avez une valeur qui inclut une décimale, mais que la valeur décimale est négligeable (c'est-à-dire: 100,0) et essayez de l'intégrer, vous obtiendrez une erreur. Cela semble idiot, mais appeler float corrige d'abord ce problème.

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

Ruz
la source