web-dev-qa-db-fra.com

Comment formater un nombre avec un nombre variable de chiffres en Python?

Disons que je voulais afficher le nombre 123 avec un nombre variable de zéros rembourrés sur le devant.

Par exemple, si je voulais l'afficher en 5 chiffres, j'aurais des chiffres = 5 me donnant:

00123

Si je voulais l'afficher en 6 chiffres, j'aurais des chiffres = 6 donnant:

000123

Comment pourrais-je faire cela en Python?

57
Eddy

Il existe une méthode de chaîne appelée zfill:

>>> '12344'.zfill(10)
0000012344

Il remplira le côté gauche de la chaîne avec des zéros pour rendre la longueur de chaîne N (10 dans ce cas).

36
Donald Miner

Si vous l'utilisez dans une chaîne formatée avec la méthode format() qui est préférée à l'ancien style ''% formatage

>>> 'One hundred and twenty three with three leading zeros {0:06}.'.format(123)
'One hundred and twenty three with three leading zeros 000123.'

Voir
http://docs.python.org/library/stdtypes.html#str.format
http://docs.python.org/library/string.html#formatstrings

Voici un exemple à largeur variable

>>> '{num:0{width}}'.format(num=123, width=6)
'000123'

Vous pouvez même spécifier le caractère de remplissage comme une variable

>>> '{num:{fill}{width}}'.format(num=123, fill='0', width=6)
'000123'
157
John La Rooy
'%0*d' % (5, 123)
17

Avec l'introduction de littéraux de chaîne formatés ("f-strings" pour faire court) dans Python 3.6, il est maintenant possible d'accéder à des variables précédemment définies avec une syntaxe plus brève:

>>> name = "Fred"
>>> f"He said his name is {name}."
'He said his name is Fred.'

Les exemples donnés par John La Rooy peuvent être écrits comme

In [1]: num=123
   ...: fill='0'
   ...: width=6
   ...: f'{num:{fill}{width}}'

Out[1]: '000123'
6
joelostblom
print "%03d" % (43)

Impressions

043

5
st0le

Utiliser la mise en forme des chaînes

print '%(#)03d' % {'#': 2}
002
print '%(#)06d' % {'#': 123}
000123

Plus d'informations ici: texte du lien

1
Blue Peppers