Best way to format integer as string with leading zeros?
本问题已经有最佳答案,请猛点这里访问。
我需要将前导零添加到整数,以生成一个具有定义数量的数字($cnt)的字符串。将这个简单函数从php转换为python的最佳方法是:
1 2 3 4 5 6 | function add_nulls($int, $cnt=2) { $int = intval($int); for($i=0; $i<($cnt-strlen($int)); $i++) $nulls .= '0'; return $nulls.$int; } |
有什么功能可以做到这一点吗?
可以使用
1 2 | In [3]: str(1).zfill(2) Out[3]: '01' |
标准方法是使用格式字符串修饰符。这些格式字符串方法在大多数编程语言中都可用(例如,通过C中的sprintf函数),并且是一个方便了解的工具。
1 2 | i = random.randint(0,99999) print"%05d" % i |
它将输出长度为5的字符串。
编辑:在python2.6及以上版本中,还有:
1 | print '{0:05d}'.format(i) |
。
参见:https://docs.python.org/2/library/string.html
您很可能只需要格式化整数:
1 | '%0*d' % (fill, your_int) |
例如,
1 2 | >>> '%0*d' % (3, 4) '004' |
号
python 3.6 f-strings允许我们轻松添加前导零:
1 2 | number = 5 print(f' now we have leading zeros in {number:02d}') |
。
看看这篇关于的好文章。
python 2.6允许:
1 2 3 4 | 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的内容呢?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | # 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 |
您至少有两个选项:
- str.zfill:
lambda n, cnt=2: str(n).zfill(cnt) 。 % 格式:lambda n, cnt=2:"%0*d" % (cnt, n) 格式
如果在python>2.5上,请参见clorz答案中的第三个选项。
内置
此函数接受
1 | def zfill_alternative(x,len=4): return ( (('0'*len)+str(x))[-l:] if len(str(x))<len else str(x) ) |
。
总而言之,内置:
一个简单的转换将是(同样使用一个函数):
1 2 3 4 5 | def add_nulls2(int, cnt): nulls = str(int) for i in range(cnt - len(str(int))): nulls = '0' + nulls return nulls |
这是我的python函数:
1 2 3 4 | def add_nulls(num, cnt=2): cnt = cnt - len(str(num)) nulls = '0' * cnt return '%s%s' % (nulls, num) |
。