将整数格式设置为带前导零的string的最佳方法是什么?

我需要将前导零添加到整数以创build一个具有定义的数字位数($ cnt)的string。 将这个简单的函数从PHP转换成Python的最佳方式是什么?

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

有没有一个function可以做到这一点?

您可以使用zfill()方法填充零string:

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

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

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

这将输出一个长度为5的string。


编辑:在Python2.6及以上,还有:

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

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

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

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

例如,

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

Python 2.6允许这样做:

 add_nulls = lambda number, zero_count : "{0:0{1}d}".format(number, zero_count) >>>add_nulls(2,3) '002' 

你至less有两个select:

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

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

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

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

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

看看这个好post吧 。

一个简单的转换将是(再次与一个函数):

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

内置zfill

这个函数需要x并将其转换为一个string,并且只在开始时才添加零,只有在长度太短的情况下:

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

总结一下 – 内build: zfill已经足够好了,但是如果有人对如何手工实现这个问题感到好奇,这里还有一个例子。

这是我的Python函数:

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

只是为了文化,在PHP上,你有一个函数str_pad ,它完成了你的函数add_nulls的工作。

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