如何在Python 3中使用前导零填充字符串

145
我试着让 length = 001 在 Python 3 中起作用,但无论我如何尝试打印它,它都会截断没有前导零的值 (length = 1)。我该如何防止这种情况发生,而不必在打印输出之前将 length 转换为字符串?

1
这取决于你如何获得001length = 001length = 1'(数字)相同,要获得001,你应该使用一些字符串格式化(请参见答案)。但是length ='001'不同,它是一个字符串,你可以通过int(length)获取数字。 - martin-voj
5个回答

203

使用 zfill() 辅助方法来为任何字符串、整数或浮点数添加左边的零填充;它适用于 Python 2.xPython 3.x

需要注意的是,Python 2已经不再受支持

示例用法:

print(str(1).zfill(3))
# Expected output: 001

描述:

zfill() 方法用于给定一个字符串,如果其长度小于指定的宽度,则在左侧填充0,否则保持原样。

语法:

str(string).zfill(width)
# Where string represents a string, an integer or a float, and
# width, the desired length to left-pad.

6
我已经使用Python编程了5年,但从未遇到过这个函数。非常有用的信息。 - seralouk
1
还有str(x).rjust(3, '0'),在速度上完全等效,您可以使用任何字符进行填充。 - undefined

162
自 Python 3.6 起,您可以使用 fstring:
>>> length = 1
>>> print(f'length = {length:03}')
length = 001

5
更安全的做法是使用 print(f'length = {length:>03}')(注意 >)因为如果 length 是一个字符串,例如 length = '1',这个例子将会失败。 - bn_ln
对于大型数据集,请注意,如果输入是整数,则使用zfill方法的速度比这种方法稍快,并且如果输入已经格式化为字符串,则速度大约快3倍。 - undefined

48

有很多方法可以实现这个,但在我看来,Python 3.6+ 中最简单的方法是:

print(f"{1:03}")

3
请问您能否解释一下这个语法,或者提供一个链接让我可以了解更多相关信息? - Cherona
3
@Cherona https://docs.python.org/3/library/string.html#format-examples - Anatol
2
我认为这是最简单的方法。 "3" 部分指定了数字的总位数。因此,{1:03} 将显示 001。如果是 {123:03},则会显示 123。如果是 {123:04},则会显示 0123,以此类推... - dduffy
嘿,那真是最酷的方式! - Radamand

13

Python整数没有内在的长度或有效数字数量。如果你想要它们以特定的方式打印,你需要将它们转换为字符串。有几种方法可以让你指定填充字符和最小长度等信息。

要使用零填充到最少三个字符,请尝试:

length = 1
print(format(length, '03'))

-8

我建议这种丑陋的方法,但它有效:

length = 1
lenghtafterpadding = 3
newlength = '0' * (lenghtafterpadding - len(str(length))) + str(length)

我来这里是为了找到一个比这个更轻量级的解决方案!


1
尝试这个:print(f"{1:03}") - Anatol

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接