题 将零填充到字符串的最好方法


使用零填充数字字符串的最Pythonic方法是什么,即数字字符串是否具有特定长度?


1004
2017-12-03 22:39


起源




答案:


字符串:

>>> n = '4'
>>> print n.zfill(3)
004

对于数字:

>>> n = 4
>>> print '%03d' % n
004
>>> print format(n, '03') # python >= 2.6
004
>>> print '{0:03d}'.format(n)  # python >= 2.6
004
>>> print '{foo:03d}'.format(foo=n)  # python >= 2.6
004
>>> print('{:03d}'.format(n))  # python >= 2.7 + python3
004
>>> print('{0:03d}'.format(n))  # python 3
004
>>> print(f'{n:03}') # python >= 3.6
004

字符串格式文档


1599
2017-12-03 22:42



对于'float'类型的对象,未知格式代码'd'。 - Cees Timmerman
百分比格式不是 弃用,确切地说。只是, 温柔地气馁:“更新 str.format() interface ...提供了一种通常更强大,更灵活和可扩展的格式化文本的方法。“ - Kevin
注释 python >= 2.6 不对。该语法不起作用 python >= 3。你可以改成它 python < 3,但我可以建议总是使用括号并完全省略评论(鼓励推荐使用)? - Jason R. Coombs
请注意,您无需为格式字符串编号: '{:03d} {:03d}'.format(1, 2) 隐式按顺序分配值。 - Dragon


只需使用 rjust 字符串对象的方法。

这个例子将生成一个10个字符长的字符串,根据需要填充。

>>> t = 'test'
>>> t.rjust(10, '0')
>>> '000000test'

274
2017-12-03 22:47





对于数字:

print "%05d" % number

也可以看看: Python:字符串格式

编辑:值得注意的是,至于 昨天 2008年12月3日,这种格式化方法不赞成使用 format 字符串方法:

print("{0:05d}".format(number)) # or
print(format(number, "05d"))

看到 PEP 3101 详情。


85
2017-12-03 22:41



PEP 3101未声明%以任何方式被弃用。 - zwirbeltier
@zwirbeltier PEP 3101解释了如何使用格式,就是我的意思。 - Konrad Rudolph
“EDIT”仍然声明“......这种格式化方法已被弃用......”。 - zwirbeltier
@zwirbeltier是的,它已被弃用。但这并未在PEP中直接说明。但是,文档说要使用 format 相反,人们通常会将此解释为弃用意图。 - Konrad Rudolph


>>> '99'.zfill(5)
'00099'
>>> '99'.rjust(5,'0')
'00099'

如果你想要相反:

>>> '99'.ljust(5,'0')
'99000'

43
2018-01-10 23:19





适用于Python 2和Python 3:

>>> "{:0>2}".format("1")  # Works for both numbers and strings.
'01'
>>> "{:02}".format(1)  # Only works for numbers.
'01'

41
2018-06-24 12:31





str(n).zfill(width) 会合作的 stringS, intS, floats ...并且是Python 2。X 和3。X 兼容:

>>> n = 3
>>> str(n).zfill(5)
'00003'
>>> n = '3'
>>> str(n).zfill(5)
'00003'
>>> n = '3.0'
>>> str(n).zfill(5)
'003.0'

32
2018-06-01 04:40





对于那些来这里了解而不仅仅是快速回答的人。 我特别为时间字符串做这些:

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

"{:0>3}:{:0>5}".format(hour,minute)
# prints '004:00003'

"{:0<3}:{:0<5}".format(hour,minute)
# prints '400:30000'

"{:$<3}:{:#<5}".format(hour,minute)
# prints '4$$:3####'

“0”符号用“2”填充字符替换什么,默认为空格

“>”符号将所有2“0”字符对齐到字符串的左侧

“:”符号format_spec


16
2017-07-13 13:59





width = 10
x = 5
print "%0*d" % (width, x)
> 0000000005

有关所有令人兴奋的细节,请参阅打印文档!

Python 3.x更新(7。5年后)

最后一行现在应该是:

print("%0*d" % (width, x))

print() 现在是一个功能,而不是一个声明。请注意,我仍然喜欢老学校 printf() 风格,因为,IMNSHO,它读起来更好,因为,嗯,我自1980年1月以来一直在使用那种符号。东西......老狗......什么东西......新技巧。


14
2017-12-03 22:44





>>> width = 4
>>> x = 5
>>> print("%0*d" %(width,x))
>>> 00005

这将在python 3.x中工作


4
2017-08-01 05:44





对于保存为整数的邮政编码:

>>> a = 6340
>>> b = 90210
>>> print '%05d' % a
06340
>>> print '%05d' % b
90210

4
2018-06-01 04:27



不是在Python 3.x中,它不是。 - Johnsyweb
你是对的,无论如何我更喜欢你对zfill的建议
保存为整数的邮政编码是失败的! :) - Anentropic