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

我想用空格填写一个字符串。我知道以下方法适用于零:

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

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

'hi    '

当然,我可以测量字符串长度并做str+" "*leftover,但我喜欢最短的方法。

754726 次浏览

你可以试试这个:

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

您可以使用#E YZ 0执行此操作:

返回长度为宽度的字符串中左对齐的字符串。填充使用指定的fillchar(默认为空格)完成。如果宽度小于len(s),则返回原始字符串。

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

使用#E YZ 0

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

您还应该考虑#E YZ 0#E YZ 1#E YZ 2进行字符串格式设置。这些可以链接并指定“填补”字符,因此:

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

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

找个时间看看#E YZ 0:里面有很多好东西。

对于一种灵活的方法,即使在格式化复杂的字符串时也可以工作,您可能应该使用字符串格式化迷你语言

使用f字串

>>> f'{"Hi": <16} StackOverflow!'  # Python >= 3.6
'Hi               StackOverflow!'

str.format()方法

>>> '{0: <16} StackOverflow!'.format('Hi')  # Python >=2.6
'Hi               StackOverflow!'

使用Python 2.7的字符串的迷你格式

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

这个左对齐,并用''字符填充到8个字符。

你也可以中心你的字符串:

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

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

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

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

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

如果您想传入整个套件和kaboodle的变量:

'{message:{fill}{align}{width}}'.format(
message='Hi',
fill=' ',
align='<',
width=16,
)

结果(你猜对了):

'Hi              '

对于所有这些,您可以使用python 3.6+f字符串

message = 'Hi'
fill = ' '
align = '<'
width = 16
f'{message:{fill}{align}{width}}'

当然,结果是:

'Hi              '

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

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

使用切片不是更Pythonic吗?

例如,要在字符串右侧填充空格,直到它的长度为10个字符:

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

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

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

当然,它需要知道你想要填充多长时间,但它不需要测量你开始的字符串的长度。

从Python 3.6开始,你可以这样做

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

使用文字串插值

或者,如果你的填充大小是一个变量,像这样(感谢@Matt M.!):

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

正确的方法是使用官方留档中描述的Python格式语法

对于这种情况,它只是:
'{:10}'.format('hi')
输出:
'hi '

说明:

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

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

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

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

你可以使用列表理解来做到这一点,这也会给你一个关于空格数量的想法,这将是一个单行。

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

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

(1)向右填充空格:

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

(2)用左边的前导零填充:

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

太长别读

text = 'hi'
print(f'{text:10}') # 'hi        '

更长的解释

Python3.6开始,您可以使用f字符串文字插值

可变空间:

value = 4
space = 10


# move value to left
print(f'foo {value:<{space}} bar') # foo 4          bar
# move value to right
print(f'foo {value:>{space}} bar') # foo          4 bar
# center value
print(f'foo {value:^{space}} bar') # foo     4      bar

恒定空间:

value = 4


# move value to left
print(f'foo {value:<10} bar') # foo 4          bar
# move value to right
print(f'foo {value:>10} bar') # foo          4 bar
# center value
print(f'foo {value:^10} bar') # foo     4      bar

如果你想用其他char和space填充,请在开头指定它:

value = 4
space = 10
padd = '_'


print(f'foo {value:{padd}^{space}} bar') # foo ____4_____ bar
print(f'foo {value:_^10} bar')           # foo ____4_____ bar