我需要将前导零添加到整数,使一个具有定义数量的数字($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;
}
有没有函数可以做到这一点?
我需要将前导零添加到整数,使一个具有定义数量的数字($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;
}
有没有函数可以做到这一点?
当前回答
你很可能只需要格式化你的整数:
'%0*d' % (fill, your_int)
例如,
>>> '%0*d' % (3, 4)
'004'
其他回答
你很可能只需要格式化你的整数:
'%0*d' % (fill, your_int)
例如,
>>> '%0*d' % (3, 4)
'004'
标准的方法是使用格式化字符串修饰符。这些格式化字符串方法在大多数编程语言中都是可用的(例如,通过c中的sprintf函数),是一种方便的工具。
输出长度为5的字符串。
... 在Python 3.5及以上版本中:f-strings。
i = random.randint(0, 99999)
print(f'{i:05d}')
在这里搜索f-strings以获得更多细节。
... Python 2.6及以上版本:
print '{0:05d}'.format(i)
... Python 2.6之前:
print "%05d" % i
参见:https://docs.python.org/3/library/string.html
你至少有两个选择:
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
内置zfill的一行程序替代。
此函数接受x并将其转换为字符串,仅在长度太短时才在开头添加0:
def zfill_alternative(x,len=4): return ( (('0'*len)+str(x))[-l:] if len(str(x))<len else str(x) )
总而言之,内置:zfill已经足够好了,但是如果有人想知道如何手动实现它,这里还有一个例子。