Dado:
a = 1
b = 10
c = 100
Como exibir um zero inicial para todos os números com menos de dois dígitos?
Esta é a saída que estou esperando:
01
10
100
Dado:
a = 1
b = 10
c = 100
Como exibir um zero inicial para todos os números com menos de dois dígitos?
Esta é a saída que estou esperando:
01
10
100
Respostas:
No Python 2 (e Python 3), você pode fazer:
print "%02d" % (1,)
Basicamente, % é como printf
ou sprintf
(consulte a documentação ).
Para Python 3. +, o mesmo comportamento também pode ser alcançado com format
:
print("{:02d}".format(1))
Para o Python 3.6+, o mesmo comportamento pode ser alcançado com as strings f :
print(f"{1:02d}")
x = "%02d.txt" % i
gera TypeError (não pode concatenar objetos 'str' e 'int'), mas x = "%02d.txt" % (i,)
não o faz. Interessante. Gostaria de saber onde é que documentou
%
formatador de strings.
Você pode usar str.zfill
:
print(str(1).zfill(2))
print(str(10).zfill(2))
print(str(100).zfill(2))
impressões:
01
10
100
"{1:02d}"
não pode ter variáveis no lugar de 2
(como se você estivesse criando uma função dinâmica).
No Python 2.6+ e 3.0+, você usaria o format()
método string:
for i in (1, 10, 100):
print('{num:02d}'.format(num=i))
ou usando o built-in (para um único número):
print(format(i, '02d'))
Consulte a documentação do PEP-3101 para obter as novas funções de formatação.
print('{:02}'.format(1))
print('{:02}'.format(10))
print('{:02}'.format(100))
impressões:
01
10
100
One zero:{0:02}, two zeros: {0:03}, ninezeros: {0:010}'.format(6)
print '{:02}'.format(1)
No Python> = 3.6 , você pode fazer isso de forma sucinta com as novas strings f que foram introduzidas usando:
f'{val:02}'
que imprime a variável com o nome val
com um fill
valor de 0
e um width
de 2
.
Para o seu exemplo específico, você pode fazer isso muito bem em um loop:
a, b, c = 1, 10, 100
for val in [a, b, c]:
print(f'{val:02}')
que imprime:
01
10
100
Para obter mais informações sobre strings-f, dê uma olhada no PEP 498 onde foram introduzidas.
x = [1, 10, 100]
for i in x:
print '%02d' % i
resulta em:
01
10
100
Leia mais informações sobre a formatação de cadeias usando% na documentação.
Ou outra solução.
"{:0>2}".format(number)
"{0:0>2}".format(number)
, se alguém quer nLeadingZeros eles devem notar que eles também podem fazer:"{0:0>{1}}".format(number, nLeadingZeros + 1)
Use uma string de formato - http://docs.python.org/lib/typesseq-strings.html
Por exemplo:
python -c 'print "%(num)02d" % {"num":5}'
É assim que eu faço:
str(1).zfill(len(str(total)))
Basicamente, o zfill pega o número de zeros à esquerda que você deseja adicionar, por isso é fácil pegar o número maior, transformá-lo em uma string e obter o comprimento, assim:
Python 3.6.5 (padrão, 11 de maio de 2018, 04:00:52) [GCC 8.1.0] no Linux Digite "ajuda", "direitos autorais", "créditos" ou "licença" para obter mais informações. >>> total = 100 >>> print (str (1) .zfill (len (str (total)))) 001 >>> total = 1000 >>> print (str (1) .zfill (len (str (total)))) 0001 >>> total = 10000 >>> print (str (1) .zfill (len (str (total)))) 00001 >>>
Você pode fazer isso com f strings .
import numpy as np
print(f'{np.random.choice([1, 124, 13566]):0>8}')
Isso imprimirá um comprimento constante de 8 e preencherá o resto com a liderança 0
.
00000001
00000124
00013566
df['Col1']=df['Col1'].apply(lambda x: '{0:0>5}'.format(x))
O 5 é o número total de dígitos.
Eu usei este link: http://www.datasciencemadesimple.com/add-leading-preceding-zeros-python/