Как отформатировать число с переменным количеством цифр в Python?

Скажем, я хотел отобразить число 123 с переменным количеством дополненных нулей спереди.

Например, если бы я хотел отобразить его 5 цифрами, у меня были бы цифры = 5, что дало бы мне:

00123

Если бы я хотел отобразить его в 6 цифрах, у меня были бы цифры = 6, дающие:

000123

Как бы я сделал это в Python?


person Eddy    schedule 12.07.2010    source источник


Ответы (7)


Существует строковый метод zfill:

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

Он дополнит левую часть строки нулями, чтобы получить длину строки N (в данном случае 10).

person Donald Miner    schedule 12.07.2010
comment
Это именно то, что я ищу, я просто делаю '123'.zfill(m), что позволяет мне использовать переменную вместо заранее определенного количества цифр. Спасибо! - person Eddy; 12.07.2010

Если вы используете его в форматированной строке с методом format(), который предпочтительнее форматирования старого стиля ''%

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

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

Вот пример с переменной шириной

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

Вы даже можете указать заполняющий символ как переменную

>>> '{num:{fill}{width}}'.format(num=123, fill='0', width=6)
'000123'
person John La Rooy    schedule 12.07.2010
comment
+1 за упоминание нового метода формата. К этому нужно немного привыкнуть, но я на самом деле чувствую, что он немного чище, чем старый стиль %, что кажется мне ироничным, потому что раньше я считал, что стиль % был самым чистым методом. - person Wayne Werner; 12.07.2010
comment
Также поддерживаются безымянные папки-заполнители (по крайней мере, в Python 3.4): "{:{}{}}".format(123, 0, 6). - person CodeManX; 24.08.2015
comment
@CoDEmanX Безымянные заполнители также работают в python 2.7 - спасибо. - person fantabolous; 09.11.2015
comment
С введением f-строк в Python 3.6 теперь можно получить доступ к ранее определенным переменным без необходимости использования .format. Просто добавьте f к строке: f'{num:{fill}{width}}'. Я добавил ответ с этой информацией. - person joelostblom; 26.05.2017

Благодаря введению форматированных строковых литералов ("f-строки" для краткости) в Python 3.6 теперь можно получить доступ к ранее определенным переменным с более кратким синтаксисом:

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

Примеры, приведенные Джоном Ла Роем, можно записать как

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

Out[1]: '000123'
person joelostblom    schedule 26.05.2017

Для тех, кто хочет сделать то же самое с python 3.6+ и f-Strings, это решение.

width = 20
py, vg = "Python", "Very Good"
print(f"{py:>{width}s} : {vg:>{width}s}")
person Praveen Kulkarni    schedule 27.02.2020
comment
Что такое s? - person Dan Nissenbaum; 11.03.2021

print "%03d" % (43)

Отпечатки

043

person st0le    schedule 12.07.2010

Использовать форматирование строк

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

Подробнее здесь: текст ссылки

person Blue Peppers    schedule 12.07.2010

person    schedule
comment
Это также весьма полезно для более общих случаев. Это старый стиль форматирования, не так ли? Жалко, что старый стиль уходит в прошлое. - person Eddy; 12.07.2010
comment
Что означает * в %0*d? Я проверяю документы Python. * не входит в format_spec ::= [[fill]align][sign][#][0][width][,][.precision][type]. - person SparkAndShine; 24.09.2016
comment
@ Игнасио Васкес-Абрамс, возможно ли это с форматированием в новом стиле? - person user1633361; 03.04.2020