Qual é a forma mais pítonica de preencher uma string numérica com zeros à esquerda, ou seja, para que a string numérica tenha um comprimento específico?
Cordas:
>>> n = '4'
>>> print(n.zfill(3))
004
E para os números:
>>> n = 4
>>> print('%03d' % n)
004
>>> print(format(n, '03')) # python >= 2.6
004
>>> print('{0:03d}'.format(n)) # python >= 2.6 + python 3
004
>>> print('{foo:03d}'.format(foo=n)) # python >= 2.6 + python 3
004
>>> print('{:03d}'.format(n)) # python >= 2.7 + python3
004
>>> print(f'{n:03}') # python >= 3.6
004
Além do zfill
, você pode utilizar a formatação geral de cordas:
print(f'{number:05d}') # (since Python 3.6), or
print('{:05d}'.format(number)) # or
print('{0:05d}'.format(number)) # or (explicit 0th positional arg. selection)
print('{n:05d}'.format(n=number)) # or (explicit `n` keyword arg. selection)
print(format(number, '05d'))
Documentação para formatação de strings e f-strings.
width = 10
x = 5
print "%0*d" % (width, x)
> 0000000005
Veja a documentação impressa para todos os detalhes interessantes!
Actualização para Python 3.x (7,5 anos depois)
Essa última linha deve ser agora:
print("%0*d" % (width, x))
Isto é, impressão()
é agora uma função, não uma declaração. Note que eu ainda prefiro o estilo printf()
da Old School porque, IMNSHO, ele lê melhor, e porque, um, I'tenho utilizado essa notação desde janeiro de 1980. Algo ... cães velhos ... algo algo ... truques novos.