Python字符串和数字补零方法详解

Python字符串和数字补零方法详解

技术背景

在Python编程中,我们经常会遇到需要对字符串或数字进行补零操作的场景,比如格式化时间、处理邮政编码等。补零可以让数据呈现更加规整,方便后续处理和展示。

实现步骤

字符串补零

可以使用zfill方法或rjust方法。

  • zfill方法:
1
2
n = '4'
print(n.zfill(3)) # 输出: 004
  • rjust方法:
1
2
s = 'test'
print(s.rjust(10, '0')) # 输出: 000000test

数字补零

有多种方法可以实现,以下是不同Python版本适用的方法:

  • Python 3.6及以上版本,推荐使用f-strings:
1
2
n = 4
print(f'{n:03}') # 输出: 004
  • 通用方法:
1
2
3
4
5
print('%03d' % n)  # 输出: 004
print(format(n, '03')) # 输出: 004
print('{0:03d}'.format(n)) # 输出: 004
print('{foo:03d}'.format(foo=n)) # 输出: 004
print('{:03d}'.format(n)) # 输出: 004

核心代码

不同补零方式的示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 字符串补零
n = '4'
print(n.zfill(3)) # 004

# 数字补零 - f-strings
n = 4
print(f'{n:03}') # 004

# 数字补零 - 通用方法
print('%03d' % n) # 004
print(format(n, '03')) # 004
print('{0:03d}'.format(n)) # 004
print('{foo:03d}'.format(foo=n)) # 004
print('{:03d}'.format(n)) # 004

# 使用rjust方法
s = 'test'
print(s.rjust(10, '0')) # 000000test

时间字符串补零示例

1
2
3
hour = 4
minute = 3
print("{:0>2}:{:0>2}".format(hour, minute)) # 04:03

自定义补零函数示例

1
2
3
4
def pad_left(n, width, pad="0"):
return ((pad * width) + str(n))[-width:]

print(pad_left(4, 3)) # 004

最佳实践

性能考虑

在性能方面,zfill方法通常是最快的。以下是一个简单的性能测试:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import timeit

setup = '''
from random import randint
def test_1():
num = randint(0,1000000)
return str(num).zfill(7)
def test_2():
num = randint(0,1000000)
return format(num, '07')
'''

print(timeit.Timer("test_1()", setup=setup).repeat(3, 900000))
print(timeit.Timer("test_2()", setup=setup).repeat(3, 900000))

推荐使用场景

  • 如果处理的是字符串或需要移动正负号到开头,推荐使用zfill方法。
  • 如果是Python 3.6及以上版本,对于数字补零,f-strings是最简洁的方式。

常见问题

关键字参数问题

zfill方法不允许使用关键字参数:

1
2
3
4
try:
'1'.zfill(width=4)
except TypeError as e:
print(e) # zfill() takes no keyword arguments

字符串和数字处理差异

在使用f-strings时,使用整数可以正确处理正负号,而使用字符串则可能出现问题:

1
2
print(f'{-1:08}')  # -0000001
print(f'{"-1":0>8}') # 000000-1

Python字符串和数字补零方法详解
https://119291.xyz/posts/python-string-and-number-zero-padding-methods/
作者
ww
发布于
2025年5月19日
许可协议