显示数字的前导零


Answers:


1059

在Python 2(和Python 3)中,您可以执行以下操作:

print "%02d" % (1,)

基本上就像printfsprintf(请参阅docs)。


对于Python 3. +,也可以通过以下方式实现相同的行为format

print("{:02d}".format(1))

对于Python 3.6+,可以使用f-strings实现相同的行为:

print(f"{1:02d}")

8
示例:打印“%05d”%result ['postalCode']以获取5位数的邮政编码。
Nick Woodhams 2012年

2
x = "%02d.txt" % i引发TypeError(无法连接'str'和'int'对象),但x = "%02d.txt" % (i,)不这样做。有趣。我想知道记录在哪里
theta 2012年

@theta在2.7.6中,我没有收到错误。也许这是他们自此以来已修复的特定版本的Python中的错误?
杰克M.14年

1
也许。在2.7.6中,格式值不是元组也不例外(至少在此示例中如此)。查看评论的日期,我想当时我正在运行2.7.3,那时我还不知道将单个变量放入元组可以使您在使用%字符串格式化程序时更加安全。
theta

1
详细地说,文档在这里对此进行了解释:“当未给出明确的对齐方式时,在宽度字段前面加上零('0')字符可启用数字类型的符号感知零填充。这等效于' 0”,对齐类型为“ =”。”
JHS

940

您可以使用str.zfill

print(str(1).zfill(2))
print(str(10).zfill(2))
print(str(100).zfill(2))

印刷品:

01
10
100

71
我喜欢这种解决方案,因为它不仅在输出数字时有用,而且在需要将其分配给变量时也有帮助...例如x = str(datetime.date.today()。month).zfill(2)将返回x为2月的“ 02”。
EroSan

2
这应该是正确的答案,因为"{1:02d}"不能使用变量代替2(例如,如果您正在创建动态函数)。
约书亚·瓦吉斯

363

在Python 2.6+和3.0+中,您将使用format()字符串方法:

for i in (1, 10, 100):
    print('{num:02d}'.format(num=i))

或使用内置的(对于单个数字):

print(format(i, '02d'))

有关新的格式化功能,请参阅PEP-3101文档。


29
同样适用于Python 2.7.5。如果您不想使用命名参数,也可以使用'{:02d}'。format(1)。
詹森·马滕斯

1
在2.7.2中正常工作,使用浮点数“ {0:04.0f}”。format(1.1)给出0001(:04 =至少4个字符,在这种情况下,前导0,.0f =不带小数的浮点数) 。我知道%格式化,但想修改现有的.format语句而不重写整个内容。谢谢!
Michael Stimson

129
print('{:02}'.format(1))
print('{:02}'.format(10))
print('{:02}'.format(100))

印刷品:

01
10
100

1
这样,您就可以在字符串中多次重复该参数:One zero:{0:02}, two zeros: {0:03}, ninezeros: {0:010}'.format(6)
srodriguex 2014年

2
仅与Python 3兼容。如果使用Python 2.7,请执行print '{:02}'.format(1)
Blairg23'1



56
x = [1, 10, 100]
for i in x:
    print '%02d' % i

结果是:

01
10
100

在文档中阅读有关使用%格式化字符串的更多信息


9
文档示例很烂。他们将映射与前导零样本一起输入,因此除非您已经知道它是如何工作的,否则很难知道哪个是哪个。那就是让我来到这里的原因。
Grant

49

使用Python的方式:

str(number).rjust(string_width, fill_char)

这样,如果原始字符串的长度大于string_width,则将其原样返回。例:

a = [1, 10, 100]
for num in a:
    print str(num).rjust(2, '0')

结果:

01
10
100

33

或其他解决方案。

"{:0>2}".format(number)

3
这将是Python的方式,尽管我为了清楚起见将参数包括在内- "{0:0>2}".format(number),如果有人想要nLeadingZeros,他们应该注意他们也可以这样做:"{0:0>{1}}".format(number, nLeadingZeros + 1)
Jonathan Allan


4

这是我的方法:

str(1).zfill(len(str(total)))

基本上,zfill接受要添加的前导零的数量,因此很容易将最大的数字转换为字符串并获取长度,如下所示:

Python 3.6.5(默认,2018年5月11日,04:00:52) 
Linux上的[GCC 8.1.0]
键入“帮助”,“版权”,“信用”或“许可证”以获取更多信息。
>>>总计= 100
>>>打印(str(1).zfill(len(str(total))))
001
>>>总计= 1000
>>>打印(str(1).zfill(len(str(total))))
0001
>>>总计= 10000
>>>打印(str(1).zfill(len(str(total))))
00001
>>> 

这与Datageek的答案矛盾吗?
Peter Mortensen

1
width = 5
num = 3
formatted = (width - len(str(num))) * "0" + str(num)
print formatted


0

采用:

'00'[len(str(i)):] + str(i)

或与math模块:

import math
'00'[math.ceil(math.log(i, 10)):] + str(i)


-2

如果处理的是一位或两位数字:

'0'+str(number)[-2:] 要么 '0{0}'.format(number)[-2:]

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.