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

时间:2011-04-15 12:22:01

标签: python string string-formatting pad

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

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

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

'hi    '

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

14 个答案:

答案 0 :(得分:594)

您可以使用str.ljust(width[, fillchar])执行此操作:

  

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

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

答案 1 :(得分:313)

除非您需要支持Python 2.5,否则您可以(也可能应该)使用string-formatting mini-language,如下所示:

'{0: <16}'.format('Hi')

答案 2 :(得分:96)

新的(ish)string format method允许你使用嵌套的关键字参数做一些有趣的事情。最简单的情况:

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

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

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

如果您想传递whole kit and kaboodle的变量:

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

导致(你猜对了):

'Hi              '

答案 3 :(得分:72)

你可以试试这个:

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

答案 4 :(得分:38)

正确的方法是使用Python的格式语法,如the official documentation

中所述

对于这种情况,它只是:
'{: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!

答案 5 :(得分:34)

使用str.ljust()

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

您还应该考虑string.zfill()str.ljust()str.center()进行字符串格式化。这些可以链接并指定' fill '字符,因此:

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

这些string formatting operations具有在Python v2和v3中工作的优势。

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

答案 6 :(得分:18)

从Python 3.6开始,你可以做到

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

literal string interpolation

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

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

答案 7 :(得分:17)

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

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

答案 8 :(得分:7)

使用Python 2.7的mini formatting for strings

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

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

答案 9 :(得分:5)

只需删除0即可添加空格:

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

答案 10 :(得分:3)

使用切片不会更加pythonic吗?

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

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

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

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

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

答案 11 :(得分:1)

您可以使用列表理解来做到这一点,这也会使您对空格数量有所了解,并且只能是一个内衬。

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

答案 12 :(得分:1)

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

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

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

(2)左侧填充前导零的数字:

import (
    "fmt"

    "github.com/bytedance/go-tagexpr/validator"
)

func Example() {
    var vd = validator.New("vd")

    type InfoRequest struct {
        Name string `vd:"($!='Alice'||(Age)$==18) && regexp('\\w')"`
        Age  int    `vd:"$>0"`
    }
    info := &InfoRequest{Name: "Alice", Age: 18}
    fmt.Println(vd.Validate(info) == nil)
}

答案 13 :(得分:0)

+ =可用于附加到字符串

>>> string = 'hi'
>>> for s in range(0,5):
...    string += ' '
... 
>>> string
'hi          '