Лучший способ форматировать целое число как строку с ведущими нулями?

Мне нужно добавить ведущие нули в целое число, чтобы создать строку с определенным количеством цифр ($ cnt). Какой лучший способ перевести эту простую функцию из PHP в Python:

function add_nulls($int, $cnt=2) {
    $int = intval($int);
    for($i=0; $i<($cnt-strlen($int)); $i++)
        $nulls .= '0';
    return $nulls.$int;
}

Есть ли функция, которая может это сделать?

Ответ 1

Вы можете использовать метод zfill() для ввода строки с нулями:

In [3]: str(1).zfill(2)
Out[3]: '01'

Ответ 2

Стандартный способ - использовать модификаторы строковых символов. Эти методы строковых форматов доступны на большинстве языков программирования (например, с помощью функции sprintf в c) и являются удобным инструментом, о котором нужно знать.

i = random.randint(0,99999)
print "%05d" % i

который выведет строку длиной 5.


Изменить: в Python2.6 и выше есть также:

print '{0:05d}'.format(i)

Смотрите: https://docs.python.org/2/library/string.html

Ответ 3

Вам, скорее всего, просто нужно отформатировать целое число:

'%0*d' % (fill, your_int)

Например,

>>> '%0*d' % (3, 4)
'004'

Ответ 4

F-строки Python 3.6 позволяют легко добавлять ведущие нули:

number = 5
print(f' now we have leading zeros in {number:02d}')

Посмотрите на этот хороший пост об этой функции.

Ответ 5

Python 2.6 позволяет это:

add_nulls = lambda number, zero_count : "{0:0{1}d}".format(number, zero_count)

>>>add_nulls(2,3)
'002'

Ответ 6

Для Python 3 и выше: str.zfill() по-прежнему является наиболее читаемым вариантом

Но неплохо заглянуть в новый и мощный str.format(), если вы хотите набивать что-то, что не 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

Ответ 7

У вас есть как минимум два варианта:

  • str.zfill: lambda n, cnt=2: str(n).zfill(cnt)
  • % форматирование: lambda n, cnt=2: "%0*d" % (cnt, n)

Если на Python > 2.5, см. третий вариант в ответе clorz.

Ответ 8

Однострочный вариант, альтернативный встроенному zfill.

Эта функция принимает x и преобразует ее в строку и добавляет нули только в начале и только если длина слишком короткая:

def zfill_alternative(x,len=4): return ( (('0'*len)+str(x))[-l:] if len(str(x))<len else str(x) )

Подводя итог - build-in: zfill достаточно хорош, но если кому-то интересно, как это реализовать вручную, вот еще один пример.

Ответ 9

Прямое преобразование будет (снова с функцией):

def add_nulls2(int, cnt):
    nulls = str(int)
    for i in range(cnt - len(str(int))):
        nulls = '0' + nulls
    return nulls

Ответ 10

Только для культуры, на PHP, у вас есть функция str_pad, которая делает именно вашу работу функция add_nulls.

str_pad($int, $cnt, '0', STR_PAD_LEFT);

Ответ 11

Это моя функция Python:

def add_nulls(num, cnt=2):
  cnt = cnt - len(str(num))
  nulls = '0' * cnt
  return '%s%s' % (nulls, num)

Ответ 12

Сначала найдите цифры в числе случаев/папок. Согласно длине максимального/максимального числа случаев/папок, формат создается и добавляется как суффикс. Например. Нет случаев = 9. Случай_1. Case_2... Case_9 сгенерированы. Для No of Cases = 99, Case_01, Case_02... Case_99.. для 999, Case_001, Case_002.... Case_999 и так далее. Надеюсь, что это поможет.

NoOfCases = 9 #99 # 999
digits           = len(str(NoOfCases))

if digits == 1:
    caseFolderformat     = "Case_{0:>"+str(digits)+"}"
else:
    caseFolderformat     = "Case_{0:0>"+str(digits)+"}"

count = 0   
for i in range(NoOfCases):
    count = count + 1
    print caseFolderformat.format(count)