我需要在整数中添加前导零以创建一个具有定义数量的数字($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;
}
有没有可以做到这一点的功能?
您可以使用该zfill()
方法用零填充字符串:
In [3]: str(1).zfill(2)
Out[3]: '01'
标准方法是使用格式字符串修饰符。这些格式字符串方法在大多数编程语言中都可用(例如,通过 c 中的 sprintf 函数),并且是一个方便的了解工具。
输出长度为 5 的字符串:
... 在 Python 3.5 及更高版本中:
i = random.randint(0, 99999)
print(f'{i:05d}')
... Python 2.6 及更高版本:
print '{0:05d}'.format(i)
...在 Python 2.6 之前:
print "%05d" % i
Python 3.6 f-strings 允许我们轻松添加前导零:
number = 5
print(f' now we have leading zeros in {number:02d}')
看看这个关于这个功能的好帖子。
您很可能只需要格式化整数:
'%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'
对于 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
你至少有两个选择:
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) )
总而言之 - build-in: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)