如何在Python字符串中填充空格?

748
我想用空格填充一个字符串。我知道以下方法适用于零的情况:
>>> print("'%06d'"%4)
'000004'

但是当我想要这个的时候,我应该怎么办呢?
'hi    '

当然我可以测量字符串的长度并执行str+" "*leftover,但我希望找到最简洁的方法。

3
我知道这种方法可能会在将来被废弃,但我仍然喜欢这个古老的好方法:使用"%-6s" % s进行左对齐,使用"%6s" % s进行右对齐。 - Basj
14个回答

7

只需删除0,它就会添加空格:

>>> print  "'%6d'"%4

5

使用切片是否更符合Python风格?

例如,为了将字符串向右填充空格直到长度为10:

>>> x = "string"    
>>> (x + " " * 10)[:10]   
'string    '

要在左侧用空格填充它,直到长度为15个字符:

>>> (" " * 15 + x)[-15:]
'         string'

当然,这需要知道您想要填充的长度,但不需要测量您开始的字符串的长度。


1
你能详细说明一下吗?不是我不相信你,只是想了解为什么。 - Zev Chonoles
4
当然。最Pythonic的方法是尽可能使用内置函数,而不是自己编写解决方案。 - Mad Physicist
@MadPhysicist说切片不够Pythonic,因为你应该使用内置函数,就像说''.join(reversed(str))str[::-1]更Pythonic一样,我们都知道这不是真的。 - Nick stands with Ukraine
@NickA。那不是一个非常好的比喻。您用作示例的情况是完全有效的。然而,以我的观点,(x + " " * 10)[:10]要比使用x.ljust(10)更加复杂。 - Mad Physicist
@MadPhysicist 我的意思是你的评论“最Pythonic的方法之一是使用内置函数”并不总是准确的,而且它们并不是必须遵循的原则。虽然在这种情况下,它肯定是正确的。 - Nick stands with Ukraine

3

一个替代各种打印格式的好技巧:

(1) 向右侧填充空格:

('hi' + '        ')[:8]

(2) 在左侧填充前导零:

('0000' + str(2))[-4:]

虽然这种方法在Python中并不推荐使用,但对于缺乏高质量文本格式化功能的语言和宏来说,这种逻辑非常有用。 :)


1
由于某种原因,这是最有趣的答案,但我喜欢它。在这方面,还要考虑: min_len = 8 然后 ('hi' + ' '*min_len)[:min_len] 或者 ('0'*min_len + str(2))[-min_len] - Poikilos
1
对于数字,可以使用('0'*min_len + str(2))[-min_len:],但这只是为了好玩,我建议使用其他答案。 - Poikilos

-4
你可以使用列表推导式来完成,这样可以让你了解空格的数量,并且只需要一行代码。
"hello" + " ".join([" " for x in range(1,10)])
output --> 'hello                 '

...然后你得到一个长度为22(len("hello")+17 :( ))的字符串——这不太好。虽然我们很有趣,但我们可以做 s = "hi" ; s + (6-len(s)) * " " (当结果为负数时也可以) 。然而,使用任何框架功能来解决确切问题的答案将更容易维护(请参见其他答案)。 - Poikilos
不回答问题,因为字符串长度不同,所需空间的数量未知。 - misantroop

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