Префикс заданного числа 0 на числа - python [duplicate]

Пожалуйста, проверьте эту функцию - она ​​преобразует объект timedelta в строку «HH: MM: SS»

def format_timedelta(td):
    hours, remainder = divmod(td.total_seconds(), 3600)
    minutes, seconds = divmod(remainder, 60)
    hours, minutes, seconds = int(hours), int(minutes), int(seconds)
    if hours < 10:
        hours = '0%s' % int(hours)
    if minutes < 10:
        minutes = '0%s' % minutes
    if seconds < 10:
        seconds = '0%s' % seconds
    return '%s:%s:%s' % (hours, minutes, seconds)
640
задан Peter Mortensen 22 June 2018 в 20:51
поделиться

13 ответов

628
ответ дан Jim Fasarakis Hilliard 6 September 2018 в 05:40
поделиться

Использовать строку формата - http://docs.python.org/lib/typesseq-strings.html

Например:

python -c 'print "%(num)02d" % {"num":5}'
4
ответ дан Airsource Ltd 16 August 2018 в 11:26
поделиться

Или это:

print '{0:02d}'.format(1)

88
ответ дан ajd 16 August 2018 в 11:26
поделиться
print('{:02}'.format(1))
print('{:02}'.format(10))
print('{:02}'.format(100))

печатает:

01
10
100
101
ответ дан Fela Winkelmolen 16 August 2018 в 11:26
поделиться
  • 1
    Таким образом, вы можете повторять аргумент несколько раз в строке: One zero:{0:02}, two zeros: {0:03}, ninezeros: {0:010}'.format(6) – srodriguex 14 April 2014 в 22:00
  • 2
    Совместим только с Python 3. Если вы используете Python 2.7, сделайте print '{:02}'.format(1) – Blairg23 1 February 2017 в 00:30

Вы можете использовать str.zfill :

print str(1).zfill(2) 
print str(10).zfill(2) 
print str(100).zfill(2) 

печатает:

01
10
100
677
ответ дан Jim Fasarakis Hilliard 16 August 2018 в 11:26
поделиться
  • 1
    Мне нравится это решение, поскольку оно помогает не только при выводе числа, но когда вам нужно назначить его переменной ... например. x = str (datetime.date.today (). month) .zfill (2) вернет x как '02' за месяц feb. – EroSan 24 February 2011 в 18:33
  • 2
    Пример: print & quot;% 05d & quot; % result ['postalCode'] для 5-значного почтового индекса. – Nick Woodhams 5 June 2012 в 13:08
  • 3
    x = "%02d.txt" % i вызывает TypeError (не может конкатенировать объекты 'str' и 'int'), но x = "%02d.txt" % (i,) этого не делает. Интересно. Интересно, где это задокументировано? – theta 5 November 2012 в 20:10
  • 4
    Может быть. В 2.7.6 нет исключения, если значение формата не является кортежем (по крайней мере для этого примера). Глядя на дату моего комментария, я предполагаю, что в то время я запускал 2.7.3, и в то время я не знал, что включение одной переменной в кортеж обеспечит вам безопасную сторону при использовании форматирования строки %. – theta 4 April 2014 в 16:41
  • 5
    Чтобы уточнить, docs объясняют это здесь: «Если не указано явное выравнивание, то перед полем ширины на ноль (« 0 ») символ позволяет значить нулевое заполнение для числовых типов. Это эквивалентно значению заполнения '0' с типом выравнивания '='. & Quot; – JHS 30 March 2016 в 19:48
  • 6
    В Python3 используйте "{:02}".format(1) – Aziz Alto 16 October 2016 в 19:57

Если речь идет о числах, которые являются либо одной, либо двумя цифрами:

'0'+str(number)[-2:] или '0{0}'.format(number)[-2:]

-1
ответ дан Knowbody 16 August 2018 в 11:26
поделиться
width = 5
num = 3
formatted = (width - len(str(num))) * "0" + str(num)
print formatted
2
ответ дан nvd 16 August 2018 в 11:26
поделиться

Вот как я это делаю:

str(1).zfill(len(str(total)))

В основном zfill занимает число ведущих нулей, которые вы хотите добавить, поэтому легко взять самое большое число, превратить его в строку и получить длина, например:

Python 3.6.5 (default, May 11 2018, 04:00:52) 
[GCC 8.1.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 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
>>> 
48
ответ дан Peter Mortensen 16 August 2018 в 11:26
поделиться
  • 1
    Пример документации отстой. Они бросают сопоставление с ведущим нулевым образцом, поэтому трудно понять, что есть, если вы уже не знаете, как это работает. То, что привело меня сюда, на самом деле. – Grant 1 July 2009 в 18:52
  • 2
    Магия питона! Большой ответ – SAAD 1 December 2014 в 01:27
  • 3
    отличные решения !!! – MrRobot 19 December 2017 в 08:34
  • 4
    Разве это не противоречит ответ Датагетек ? – Peter Mortensen 22 June 2018 в 20:57

В Python 2.6+ и 3.0+ вы должны использовать метод строки format() :

for i in (1, 10, 100):
    print('{num:02d}'.format(num=i))

или использовать встроенный (для одного номера) :

print(format(i, '02d'))

См. документацию PEP-3101 для новых функций форматирования.

325
ответ дан phoenix 16 August 2018 в 11:26
поделиться
  • 1
    Также работает в Python 2.7.5. Вы также можете использовать '{: 02d}'. Format (1), если вы не хотите использовать именованные аргументы. – Jason Martens 7 January 2014 в 16:20
  • 2
    Хорошо работает в 2.7.2, с плавающей точкой «{0: 04.0f}» .format (1.1) дает 0001 (: 04 = не менее 4 символов, в этом случае ведущие 0, .0f = с плавающей запятой без знаков после запятой). Я знаю о форматировании%, но хотел бы изменить существующую инструкцию .format без перезаписи объекта whole . Благодаря! – Michael Stimson 21 July 2015 в 01:31

Или другое решение.

"{:0>2}".format(number)
31
ответ дан WaKo 16 August 2018 в 11:26
поделиться
  • 1
    Понятно, спасибо. – WaKo 21 January 2016 в 12:20
  • 2
    Это был бы путь Python, хотя я бы включил параметр для ясности - "{0:0>2}".format(number), если кто-то захочет nLeadingZeros, они должны заметить, что они также могут делать: "{0:0>{1}}".format(number, nLeadingZeros + 1) – Jonathan Allan 24 April 2016 в 18:33
48
ответ дан Peter Mortensen 6 September 2018 в 05:40
поделиться
49
ответ дан Peter Mortensen 29 October 2018 в 12:21
поделиться
0
ответ дан Sandro De Simone 29 October 2018 в 12:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: