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

问题描述 投票:0回答:14

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

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

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

'hi    '

当然我可以测量字符串长度并执行

str+" "*leftover
,但我想要最短的方法。

python string string-formatting padding
14个回答
967
投票

您可以使用

str.ljust(width[, fillchar])
来做到这一点:

返回长度为width的字符串左对齐的字符串。填充是使用指定的 fillchar 完成的(默认为空格)。如果 width 小于

len(s)
,则返回原始字符串。

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

574
投票

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

使用 f 弦

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

str.format()
方法

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

211
投票

字符串格式方法让您可以使用嵌套关键字参数做一些有趣的事情。最简单的情况:

>>> '{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 '
    

90
投票
你可以试试这个:

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

88
投票
正确的方法是使用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!
    

63
投票
使用

str.ljust()


>>> 'Hi'.ljust(6) 'Hi '
您还应该考虑使用 

string.zfill()

str.rjust()
str.center()
进行字符串格式化。这些可以链接起来并指定“
fill”字符,因此:

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

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

有时间看看

pydoc str

:里面有很多好东西。
    


39
投票
从 Python 3.6 开始你就可以这样做

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

使用

文字字符串插值

或者,如果您的填充大小位于变量中,如下所示(感谢@Matt M.!):

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

39
投票
TL;博士

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
如果您想用其他字符填充然后空格,请在开头指定:

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

21
投票
您还可以

居中您的字符串:

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

10
投票
使用 Python 2.7 的

字符串迷你格式:

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

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


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

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

5
投票
使用切片不是更Pythonic吗?

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

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

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

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

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


3
投票
一个很好的技巧,可以用来代替各种打印格式:

(1) 向右填充空格:

('hi' + ' ')[:8]
(2) 在左侧填充前导零:

('0000' + str(2))[-4:]
在 Python 中不推荐这种方法,但该逻辑对于缺乏高质量文本格式化功能的语言和宏很有用。 :)


-4
投票
您可以使用列表理解来完成此操作,这也会让您了解空格的数量,并且将是一个行。

"hello" + " ".join([" " for x in range(1,10)]) output --> 'hello '
    
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.