我想用空格填充字符串。我知道下面的方法适用于0:
>>> print "'%06d'"%4
'000004'
但我想要这个的时候该怎么办呢?:
'hi '
当然,我可以测量字符串长度和做str+" "*剩,但我想要最短的方式。
我想用空格填充字符串。我知道下面的方法适用于0:
>>> print "'%06d'"%4
'000004'
但我想要这个的时候该怎么办呢?:
'hi '
当然,我可以测量字符串长度和做str+" "*剩,但我想要最短的方式。
当前回答
字符串格式方法允许您使用嵌套的关键字参数做一些有趣的事情。最简单的例子:
>>> '{message: <16}'.format(message='Hi')
'Hi '
如果你想把16作为一个变量传入:
>>> '{message: <{width}}'.format(message='Hi', width=16)
'Hi '
如果你想传入整个工具包的变量,那么:
'{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 '
其他回答
字符串格式方法允许您使用嵌套的关键字参数做一些有趣的事情。最简单的例子:
>>> '{message: <16}'.format(message='Hi')
'Hi '
如果你想把16作为一个变量传入:
>>> '{message: <{width}}'.format(message='Hi', width=16)
'Hi '
如果你想传入整个工具包的变量,那么:
'{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 '
一个很好的技巧来代替各种打印格式:
(1)右边空格垫:
('hi' + ' ')[:8]
(2)左侧前导0的垫:
('0000' + str(2))[-4:]
Python中不推荐使用这种方法,但这种逻辑对于缺乏高质量文本格式化功能的语言和宏非常有用。:)
正确的方法是使用官方文档中描述的Python格式语法
对于这种情况,它将简单地为: {10} .format(“嗨”) 输出: “嗨”
解释:
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!
博士TL;
text = 'hi'
print(f'{text:10}') # 'hi '
更详细的解释
从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
如果你想用其他char then 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
你可以使用列表理解,这也会给你一个关于空格数量的想法,这将是一行。
"hello" + " ".join([" " for x in range(1,10)])
output --> 'hello '