Python字符串和数字补零方法详解
技术背景
在Python编程中,我们经常会遇到需要对字符串或数字进行补零操作的场景,比如格式化时间、处理邮政编码等。补零可以让数据呈现更加规整,方便后续处理和展示。
实现步骤
字符串补零
可以使用zfill
方法或rjust
方法。
1 2
| n = '4' print(n.zfill(3))
|
1 2
| s = 'test' print(s.rjust(10, '0'))
|
数字补零
有多种方法可以实现,以下是不同Python版本适用的方法:
- Python 3.6及以上版本,推荐使用f-strings:
1 2 3 4 5
| print('%03d' % n) print(format(n, '03')) print('{0:03d}'.format(n)) print('{foo:03d}'.format(foo=n)) print('{:03d}'.format(n))
|
核心代码
不同补零方式的示例代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| n = '4' print(n.zfill(3))
n = 4 print(f'{n:03}')
print('%03d' % n) print(format(n, '03')) print('{0:03d}'.format(n)) print('{foo:03d}'.format(foo=n)) print('{:03d}'.format(n))
s = 'test' print(s.rjust(10, '0'))
|
时间字符串补零示例
1 2 3
| hour = 4 minute = 3 print("{:0>2}:{:0>2}".format(hour, minute))
|
自定义补零函数示例
1 2 3 4
| def pad_left(n, width, pad="0"): return ((pad * width) + str(n))[-width:]
print(pad_left(4, 3))
|
最佳实践
性能考虑
在性能方面,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)
|
字符串和数字处理差异
在使用f-strings时,使用整数可以正确处理正负号,而使用字符串则可能出现问题:
1 2
| print(f'{-1:08}') print(f'{"-1":0>8}')
|