将整数格式化为带前导零的字符串的最佳方法?

时间:2009-04-09 09:15:33

标签: python string-formatting

我需要将前导零添加到整数以生成具有已定义数字位数的字符串($ 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;
}

是否有可以执行此操作的功能?

10 个答案:

答案 0 :(得分:525)

您可以使用zfill()方法用零填充字符串:

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

答案 1 :(得分:148)

标准方法是使用格式字符串修饰符。这些格式字符串方法在大多数编程语言中都可用(例如通过c中的sprintf函数),并且是一个方便的工具。

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

将输出长度为5的字符串。


编辑:在Python2.6及更高版本中,还有:

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

请参阅:https://docs.python.org/2/library/string.html

答案 2 :(得分:65)

您很可能只需要格式化整数:

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

例如,

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

答案 3 :(得分:35)

Python 3.6 f-strings允许我们轻松添加前导零:

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

请查看this good post

答案 4 :(得分:21)

Python 2.6允许这样:

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

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

答案 5 :(得分:12)

对于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

答案 6 :(得分:5)

您至少有两个选择:

  • str.zfill:lambda n, cnt=2: str(n).zfill(cnt)
  • %格式:lambda n, cnt=2: "%0*d" % (cnt, n)

如果在Python&gt; 2.5上,请参阅clorz答案中的第三个选项。

答案 7 :(得分:2)

内置zfill

的单行代替

此函数接受x并将其转换为字符串,并且仅在开头添加零,并且仅在长度太短时才添加:

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

总结一下 - 内置:zfill已经足够好了,但是如果有人对如何手动实现这一点感到好奇,那么还有一个例子。

答案 8 :(得分:1)

直接转换(再次使用函数):

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

答案 9 :(得分:-2)

这是我的Python函数:

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