Лучший способ отформатировать целое число как строку с ведущими нулями?[дубликат]
-
06-09-2019 - |
Вопрос
На этот вопрос уже есть ответ здесь:
- Отображать номер с ведущими нулями 17 ответов
Мне нужно добавить ведущие нули к целому числу, чтобы создать строку с определенным количеством цифр ($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;
}
Есть ли функция, которая может это сделать?
Решение
Вы можете использовать zfill()
метод заполнения строки нулями:
In [3]: str(1).zfill(2)
Out[3]: '01'
Другие советы
Стандартный способ — использовать модификаторы строки формата.Эти методы форматной строки доступны в большинстве языков программирования (например, через функцию sprintf в C) и представляют собой удобный инструмент, о котором следует знать.
i = random.randint(0,99999)
print "%05d" % i
который выведет строку длиной 5.
Редактировать:В Python2.6 и выше также есть:
print '{0:05d}'.format(i)
Скорее всего, вам просто нужно отформатировать целое число:
'%0*d' % (fill, your_int)
Например,
>>> '%0*d' % (3, 4)
'004'
f-строки Python 3.6 позволяют нам легко добавлять ведущие нули:
number = 5
print(f' now we have leading zeros in {number:02d}')
Посмотри на этот хороший пост об этой функции.
Python 2.6 позволяет это:
add_nulls = lambda number, zero_count : "{0:0{1}d}".format(number, zero_count)
>>>add_nulls(2,3)
'002'
Для 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
У вас есть как минимум два варианта:
- стр.zfill:
lambda n, cnt=2: str(n).zfill(cnt)
%
форматирование:lambda n, cnt=2: "%0*d" % (cnt, n)
Если вы используете Python > 2.5, см. третий вариант в ответе Clorz.
Однострочная альтернатива встроенному zfill
.
Эта функция принимает x
и преобразует его в строку и добавляет нули только в начале и только в том случае, если длина слишком коротка:
def zfill_alternative(x,len=4): return ( (('0'*len)+str(x))[-l:] if len(str(x))<len else str(x) )
Подводя итог - встроено: zfill
достаточно хорош, но если кому-то интересно, как реализовать это вручную, вот еще один пример.
Простое преобразование будет (опять же с функцией):
def add_nulls2(int, cnt):
nulls = str(int)
for i in range(cnt - len(str(int))):
nulls = '0' + nulls
return nulls
Это моя функция Python:
def add_nulls(num, cnt=2):
cnt = cnt - len(str(num))
nulls = '0' * cnt
return '%s%s' % (nulls, num)