如何用空格填写Python字符串?

How can I fill out a Python string with spaces?

我想用空格填充一个字符串。我知道以下内容适用于Zero:

1
2
>>> print "'%06d'"%4
'000004'

但是如果我想要这个怎么办?:

1
'hi    '

当然,我可以测量弦长,也可以做str+""*leftover,但我想要最短的方法。


您可以使用str.ljust(width[, fillchar])来完成此操作:

Return the string left justified in a string of length width. Padding is done using the specified fillchar (default is a space). The original string is returned if width is less than len(s).

1
2
>>> 'hi'.ljust(10)
'hi        '


除非您需要支持python 2.5,否则您可以(也可能应该)使用字符串格式的迷你语言,如下所示:

1
'{0: <16}'.format('Hi')


新的(ish)字符串格式方法允许您使用嵌套的关键字参数做一些有趣的事情。最简单的情况是:

1
2
>>> '{message: <16}'.format(message='Hi')
'Hi             '

如果您想将16作为变量传入:

1
2
>>> '{message: <{width}}'.format(message='Hi', width=16)
'Hi              '

如果您想为整个kit和kaboodle传递变量:

1
2
3
4
5
6
'{message:{fill}{align}{width}}'.format(
   message='Hi',
   fill=' ',
   align='<',
   width=16,
)

结果是(你猜对了):

1
'Hi              '


您可以尝试以下操作:

1
print"'%-100s'" % 'hi'


正确的方法是使用官方文档中描述的python格式语法。

对于这种情况,只需:江户十一〔七〕号哪些输出:埃多克斯1〔8〕

说明:

1
2
3
4
5
6
7
format_spec ::=  [[fill]align][sign][#][0][width][,][.precision][type]
fill        ::=  
align       ::= "<" |">" |"=" |"^"
sign        ::= "+" |"-" |""
width       ::=  integer
precision   ::=  integer
type        ::= "b" |"c" |"d" |"e" |"E" |"f" |"F" |"g" |"G" |"n" |"o" |"s" |"x" |"X" |"%"

你所需要知道的几乎都在那里。

更新:从python 3.6开始,使用文字字符串插值更加方便!

1
2
3
foo = 'foobar'
print(f'{foo:10} is great!')
# foobar     is great!


使用str.ljust()

1
2
>>> 'Hi'.ljust(6)
'Hi    '

对于字符串格式,还应该考虑使用string.zfill()str.ljust()str.center()。这些可以被链接并指定"填充"字符,因此:

1
2
>>> ('3'.zfill(8) + 'blind'.rjust(8) + 'mice'.ljust(8, '.')).center(40)
'        00000003   blindmice....        '

这些字符串格式化操作具有在Pythonv2和v3中工作的优势。

看一看江户记1(5):里面有很多好东西。


从python 3.6开始,您可以

1
2
>>> strng = 'hi'
>>> f'{strng: <10}'

使用文字字符串插值。

或者,如果您的填充大小是一个变量,则如下所示(谢谢@matt m.!):

1
2
>>> to_pad = 10
>>> f'{strng: <{to_pad}}'


您还可以将字符串居中:

1
'{0: ^20}'.format('nice')


对字符串使用python 2.7的小格式:

1
'{0: <8}'.format('123')

此左对齐,并用""字符填充到8个字符。


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

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


用切片会不会更像Python?

例如,要将右边带有空格的字符串填充到10个字符长:

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

要用左边的空格填充到15个字符长:

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

当然,这需要知道你想要填充多长时间,但不需要测量你开始时的绳子长度。


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

(1)右边有空格的垫子:

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

(2)用左前导零填充:

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


你可以使用列表理解来完成它,这也会让你对空格的数量有一个概念,并且是一行代码。

1
2
"hello" +"".join(["" for x in range(1,10)])
output --> 'hello                 '


+=可用于附加到字符串

1
2
3
4
5
6
>>> string = 'hi'
>>> for s in range(0,5):
...    string += ' '
...
>>> string
'hi          '