我想用空格填充一个字符串。我知道以下内容适用于Zero:
>>> print "'%06d'"%4
'000004'
但是如果我想要这个怎么办?:
'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).
号
>>> 'hi'.ljust(10)
'hi '
号
@Simon的答案在格式化更复杂的字符串时更加灵活和有用。
或者@abbot's,如果您坚持支持旧版本的python
现在不推荐使用ljust()。请参阅stackoverflow.com/questions/14776788/…,了解正确的方法。
它在python 3中消失了?只是想补充一点,还有rjust和center,它们的工作方式基本相同,但用于不同的路线。
ljust()、rjust()仅从字符串模块中被弃用。它们在str内置类型上可用。
。格式是标准的打印方式。
除非您需要支持python 2.5,否则您可以(也可能应该)使用字符串格式的迷你语言,如下所示:
'{0: <16}'.format('Hi')
如果变量中有"16",该怎么办?
我也明白了。应该贴出来的。医生说这应该适用于PY2.6,但我的发现是相反的。但在PY2.7中工作。
当我使用国家口音时,这种格式有问题。你希望"kra"和"kr&225;"是一样的,但事实并非如此。
@兰迪·埃多克斯(Randy EDOCX1)(3)
不要将str.format()用于只有一个{...}的模板,而不要使用其他模板。只需使用format()函数,就可以节省解析开销:format('Hi', '<16')。
我建议不要让每个阅读代码的人都学习这样一种"迷你语言"——当然,除非您将该逻辑包装在一个函数中。
@aaaaaaa你从来没有用过python,对吧…
@西蒙-不管我使用什么语言,我都会编写可读的函数。但是,是的,我对Python不太熟悉,主要写JS。仅仅因为某些东西是标准的,并不意味着你应该让每个人都分析你的代码。regex对阅读非常不友好,比python的字符串格式化迷你语言要标准得多。
新的(ish)字符串格式方法允许您使用嵌套的关键字参数做一些有趣的事情。最简单的情况是:
>>> '{message: <16}'.format(message='Hi')
'Hi '
如果您想将16作为变量传入:
>>> '{message:
'Hi '
。
如果您想为整个kit和kaboodle传递变量:
'{message:{fill}{align}{width}}'.format(
message='Hi',
fill=' ',
align='
width=16,
)
结果是(你猜对了):
'Hi '
。
您可以尝试以下操作:
print"'%-100s'" % 'hi'
打印"%-6s"%'你好!!
从python 3开始,这种语法将被弃用——最好像在我的示例中那样使用新语法,或者像在其他答案中那样使用str.ljust。这可能是最薄弱的答案。
@西蒙就像一个困在Python2.5系统上的人一样,这个答案帮助了我,而不是一个无用的答案+1
3.3中不再反对+
我更喜欢这种常见的printf语法。允许您编写复杂的字符串,而不需要无数的连接。
为了完整起见,"'%+100s'" % 'hi'将用于在'hi'的右侧放置空间。
正确的方法是使用官方文档中描述的python格式语法。
对于这种情况,只需:江户十一〔七〕号哪些输出:埃多克斯1〔8〕
说明:
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开始,使用文字字符串插值更加方便!
foo = 'foobar'
print(f'{foo:10} is great!')
# foobar is great!
号
使用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.... '
。
这些字符串格式化操作具有在Pythonv2和v3中工作的优势。
看一看江户记1(5):里面有很多好东西。
从python 3.6开始,您可以
>>> strng = 'hi'
>>> f'{strng: <10}'
号
使用文字字符串插值。
或者,如果您的填充大小是一个变量,则如下所示(谢谢@matt m.!):
>>> to_pad = 10
>>> f'{strng:
号
用于填充长度为10的前导空格的字符串。那是魔法。而且没有很好的记录。
@长野我认为这也是f'{strng:10}'的违约行为。
您还可以将字符串居中:
'{0: ^20}'.format('nice')
。
对字符串使用python 2.7的小格式:
'{0: <8}'.format('123')
。
此左对齐,并用""字符填充到8个字符。
@西蒙已经给出了这个答案…为什么要发布重复答案?
我没有点击"新回复已经发布,点击刷新",所以错过了。
只需删除0,它将添加空格:
>>> print "'%6d'"%4
号
用切片会不会更像Python?
例如,要将右边带有空格的字符串填充到10个字符长:
>>> x ="string"
>>> (x +"" * 10)[:10]
'string '
号
要用左边的空格填充到15个字符长:
>>> ("" * 15 + x)[-15:]
' string'
号
当然,这需要知道你想要填充多长时间,但不需要测量你开始时的绳子长度。
不,不会的。
你能详细解释一下吗?不是我不相信你,我只是想知道为什么。
当然。最诡异的方法是使用一个内置的函数,而不是尽可能多地使用国产的解决方案。
@疯子物理学家说,切片是较少的Python,因为你应该使用内置的功能,就像说''.join(reversed(str))比str[::-1]更Python,我们都知道这不是真的。
@尼卡。这不是一个很好的类比。作为一个例子,您使用的案例是非常有效的。然而,在我看来,使用(x +"" * 10)[:10]比使用x.ljust(10)要复杂得多。
@疯子物理学家,我更想说的是,你的评论"使用一个内置函数的最诡异的方式"并不总是准确的,而且它们也不是生活的语言。虽然在这种情况下,它确实是。
@尼卡。在这种情况下,我们达成了暴力协议:)
一个很好的技巧来代替各种打印格式:
(1)右边有空格的垫子:
('hi' + ' ')[:8]
(2)用左前导零填充:
('0000' + str(2))[-4:]
。
你可以使用列表理解来完成它,这也会让你对空格的数量有一个概念,并且是一行代码。
"hello" +"".join(["" for x in range(1,10)])
output --> 'hello '
号
+=可用于附加到字符串
>>> string = 'hi'
>>> for s in range(0,5):
... string += ' '
...
>>> string
'hi '
号
或者只使用string += ' ' * 5来避免显式的for循环。