J'ai besoin d'ajouter des zéros à l'entier pour créer une chaîne avec un nombre défini de chiffres ($ cnt). Quel est le meilleur moyen de traduire cette fonction simple de PHP en Python:
function add_nulls($int, $cnt=2) {
$int = intval($int);
for($i=0; $i<($cnt-strlen($int)); $i++)
$nulls .= '0';
return $nulls.$int;
}
Y at-il une fonction qui peut faire cela?
Vous pouvez utiliser la méthode zfill()
pour compléter une chaîne avec des zéros:
In [3]: str(1).zfill(2)
Out[3]: '01'
La méthode standard consiste à utiliser des modificateurs de format de chaîne. Ces méthodes de chaîne de format sont disponibles dans la plupart des langages de programmation (via la fonction sprintf dans c par exemple) et constituent un outil pratique à connaître.
i = random.randint(0,99999)
print "%05d" % i
qui produira une chaîne de longueur 5.
Edit: En Python2.6 et supérieur, il y a aussi:
print '{0:05d}'.format(i)
Vous avez probablement besoin de formater votre entier:
'%0*d' % (fill, your_int)
Par exemple,
>>> '%0*d' % (3, 4)
'004'
Python 3.6 f-strings nous permet d'ajouter facilement des zéros non significatifs:
number = 5
print(f' now we have leading zeros in {number:02d}')
Regardez ce bon post à propos de cette fonctionnalité.
Python 2.6 permet ceci:
add_nulls = lambda number, zero_count : "{0:0{1}d}".format(number, zero_count)
>>>add_nulls(2,3)
'002'
Pour Python 3 et au-delà: str.zfill () est toujours l'option la plus lisible.
Mais c’est une bonne idée d’examiner le nouveau et puissant str.format (). Que faire si vous voulez régler quelque chose qui n’est pas égal à 0?
# if we want to pad 22 with zeros in front, to be 5 digits in length:
str_output = '{:0>5}'.format(22)
print(str_output)
# >>> 00022
# {:0>5} meaning: ":0" means: pad with 0, ">" means move 22 to right most, "5" means the total length is 5
# another example for comparision
str_output = '{:#<4}'.format(11)
print(str_output)
# >>> 11##
# to put it in a less hard-coded format:
int_inputArg = 22
int_desiredLength = 5
str_output = '{str_0:0>{str_1}}'.format(str_0=int_inputArg, str_1=int_desiredLength)
print(str_output)
# >>> 00022
Vous avez au moins deux options:
lambda n, cnt=2: str(n).zfill(cnt)
%
mise en forme: lambda n, cnt=2: "%0*d" % (cnt, n)
Si sur Python> 2.5, voyez une troisième option dans la réponse de clorz.
zfill
.Cette fonction prend x
et la convertit en chaîne, et ajoute des zéros au début uniquement et uniquement si la longueur est trop courte:
def zfill_alternative(x,len=4): return ( (('0'*len)+str(x))[-l:] if len(str(x))<len else str(x) )
Pour résumer - la construction: zfill
suffit, mais si quelqu'un est curieux de savoir comment mettre cela en oeuvre manuellement, voici un autre exemple.
Une conversion simple serait (encore une fois avec une fonction):
def add_nulls2(int, cnt):
nulls = str(int)
for i in range(cnt - len(str(int))):
nulls = '0' + nulls
return nulls