645

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

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

但是当我想要这个时我应该怎么做?:

'hi    '

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

4

14 回答 14

872

你可以这样做str.ljust(width[, fillchar])

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

>>> 'hi'.ljust(10)
'hi        '
于 2011-04-15T12:24:56.583 回答
484

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

使用任一 f 字符串

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

或者str.format()方法

>>> '{0: <16} StackOverflow!'.format('Hi')  # Python >=2.6
'Hi               StackOverflow!'
于 2011-04-15T12:41:24.340 回答
172

新的(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-strings

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

当然还有结果:

'Hi              '
于 2014-08-13T18:40:28.480 回答
85

你可以试试这个:

print "'%-100s'" % 'hi'
于 2011-04-15T12:24:46.907 回答
80

正确的做法是使用官方文档中描述的 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!
于 2016-07-21T13:33:34.280 回答
49

使用str.ljust()

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

您还应该考虑string.zfill(),str.ljust()str.center()字符串格式。这些可以链接起来并指定“填充”字符,因此:

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

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

看看pydoc str某个时候:那里有很多好东西。

于 2011-04-15T12:27:45.173 回答
37

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

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

使用文字字符串插值

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

>>> to_pad = 10
>>> f'{strng: <{to_pad}}'
于 2016-07-06T16:05:40.550 回答
20

您还可以将字符串居中:

'{0: ^20}'.format('nice')
于 2012-07-24T16:14:48.763 回答
10

由于Python3.6您可以使用 f-strings文字插值

可变空间:

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

如果您想用其他字符填充空格,请在开头指定它:

value = 4
space = 10
padd = '_'

print(f'foo {value:{padd}^{space}} bar') # foo ____4_____ bar
print(f'foo {value:_^10} bar')           # foo ____4_____ bar
于 2021-09-17T08:55:08.037 回答
9

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

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

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

于 2011-04-15T12:58:51.807 回答
5

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

>>> print  "'%6d'"%4
于 2015-06-12T13:30:02.597 回答
3

使用切片不是更pythonic吗?

例如,要在右边用空格填充一个字符串,直到它长 10 个字符:

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

要在左边用空格填充它,直到它有 15 个字符长:

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

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

于 2015-09-15T06:09:20.473 回答
0

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

(1) 右边有空格的填充:

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

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

('0000' + str(2))[-4:]
于 2019-01-29T19:40:33.810 回答
-4

您可以使用列表理解来做到这一点,这也可以让您了解空格的数量,并且将是一个单行。

"hello" + " ".join([" " for x in range(1,10)])
output --> 'hello                 '
于 2018-11-23T13:34:45.867 回答