如何在Python中将数字字符串右侧填充零?

57

Python字符串有一个名为zfill的方法,它可以在左侧用零填充数字字符串。

In : str(190).zfill(8)
Out: '00000190'

我该如何让这个填充物在右侧呢?


1
你可以将字符串转换为整数,乘以10 **(num-length),然后再转换回字符串。 - Douglas
3个回答

57

作为一种更轻便[1]且更高效[2]的替代方案,实际上您只需使用str.ljust即可。

In [2]: '190'.ljust(8, '0')
Out[2]: '19000000'

In [3]: str.ljust?
Docstring:
S.ljust(width[, fillchar]) -> str

Return S left-justified in a Unicode string of length width. Padding is
done using the specified fill character (default is a space).
Type:      method_descriptor

[1] format 没有在旧版 Python 中出现。自 Python 3.0 起添加了格式说明符(参见 PEP 3101)和 Python 2.6。

[2] 反转两次是一项昂贵的操作。


你是说 [2] 指的是双重反转比较慢? - yucer
是的,双重反转会更慢。[2]短语有一个拼写错误。我想表达的是昂贵的操作,而不是广阔的操作。我会修复它。 - Manoel Vilela

52
查看格式规范迷你语言
In [1]: '{:<08d}'.format(190)
Out[1]: '19000000'

In [2]: '{:>08d}'.format(190)
Out[2]: '00000190'

这也适用于格式化字符串字面值,或简称为f-strings(在3.6版本中新增):
In [1]: f'{190:<08d}'
Out[1]: '19000000'

In [2]: f'{190:>08d}'
Out[2]: '00000190'

1
如果您的输入是字符串并且出现了“Unknown format code 'd' for object of type 'str'”错误,您可以使用"{:<08s}" - Skippy le Grand Gourou
1
返回翻译后的文本:短记号示例:f'{3:>02d}'生成03,f'{3:<02d}'生成30。 - Roland

15

提示:该字符串可以反转两次:在使用zfill方法之前和之后:

In : acc = '991000'

In : acc[::-1].zfill(9)[::-1]
Out: '991000000'

甚至更加容易的是:

In : acc.ljust(9, '0')
Out: '991000000'

真有趣,我从来没有注意到ljust和rjust的存在!谢谢你! - Sunday Ikpe

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