可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I want to fill out a string with spaces. I know that the following works for zero\'s:
>>> print \"\'%06d\'\"%4
\'000004\'
But what should I do when I want this?:
\'hi \'
of course I can measure string length and do str+\" \"*leftover
, but I\'d like the shortest way.
回答1:
You can do this with 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 \'
回答2:
Unless you need to support Python 2.5, you can (and probably should) use the string-formatting mini-language, like so:
\'{0: <16}\'.format(\'Hi\')
回答3:
The new(ish) string format method lets you do some fun stuff with nested keyword arguments. The simplest case:
>>> \'{message: <16}\'.format(message=\'Hi\')
\'Hi \'
If you want to pass in 16
as a variable:
>>> \'{message: <{width}}\'.format(message=\'Hi\', width=16)
\'Hi \'
If you want to pass in variables for the whole kit and kaboodle:
\'{message:{fill}{align}{width}}\'.format(
message=\'Hi\',
fill=\' \',
align=\'<\',
width=16,
)
Which results in (you guessed it):
\'Hi \'
回答4:
You can try this:
print \"\'%-100s\'\" % \'hi\'
回答5:
Use str.ljust()
:
>>> \'Hi\'.ljust(6)
\'Hi \'
You should also consider string.zfill()
, str.ljust()
and str.center()
for string formatting. These can be chained and have the \'fill\' character specified, thus:
>>> (\'3\'.zfill(8) + \'blind\'.rjust(8) + \'mice\'.ljust(8, \'.\')).center(40)
\' 00000003 blindmice.... \'
These string formatting operations have the advantage of working in Python v2 and v3.
Take a look at pydoc str
sometime: there\'s a wealth of good stuff in there.
回答6:
Correct way of doing this would be to use Python\'s format syntax as described in the official documentation
For this case it would simply be:
\'{:10}\'.format(\'hi\')
which outputs:
\'hi \'
Explanation:
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\" | \"%\"
Pretty much all you need to know is there ^.
Update:
as of python 3.6 it\'s even more convenient with literal string interpolation!
foo = \'foobar\'
print(f\'{foo:10} is great!\')
# foobar is great!
回答7:
you can also center your string:
\'{0: ^20}\'.format(\'nice\')
回答8:
As of Python 3.6 you can just do
>>> strng = \'hi\'
>>> f\'{strng: <10}\'
with literal string interpolation.
Or, if your padding size is in a variable, like this (thanks @Matt M.!):
>>> to_pad = 10
>>> f\'{strng: <{to_pad}}\'
回答9:
Use Python 2.7\'s mini formatting for strings:
\'{0: <8}\'.format(\'123\')
This left aligns, and pads to 8 characters with the \' \' character.
回答10:
Just remove the 0 and it will add space instead:
>>> print \"\'%6d\'\"%4
回答11:
Wouldn\'t it be more pythonic to use slicing?
For example, to pad a string with spaces on the right until it\'s 10 characters long:
>>> x = \"string\"
>>> (x + \" \" * 10)[:10]
\'string \'
To pad it with spaces on the left until it\'s 15 characters long:
>>> (\" \" * 15 + x)[-15:]
\' string\'
It requires knowing how long you want to pad to, of course, but it doesn\'t require measuring the length of the string you\'re starting with.
回答12:
You could do it using list comprehension, this\'d give you an idea about the number of spaces too and would be a one liner.
\"hello\" + \" \".join([\" \" for x in range(1,10)])
output --> \'hello \'
回答13:
+= can be used to append to string
>>> string = \'hi\'
>>> for s in range(0,5):
... string += \' \'
...
>>> string
\'hi \'