回答:
あなたはこれを行うことができますstr.ljust(width[, fillchar])
:
左揃えされた文字列を長さwidthの文字列で返します。パディングは、指定されたfillcharを使用して行われます(デフォルトはスペースです)。幅がより小さい場合、元の文字列が返され
len(s)
ます。
>>> 'hi'.ljust(10)
'hi '
複雑な文字列をフォーマットする場合でも機能する柔軟なメソッドの場合、おそらく次のいずれかの方法を使用して、文字列フォーマットのミニ言語を使用する必要がありますstr.format()
>>> '{0: <16} StackOverflow!'.format('Hi') # Python >=2.6
'Hi StackOverflow!'
>>> f'{"Hi": <16} StackOverflow!' # Python >= 3.6
'Hi StackOverflow!'
'{message: <{fill}}'.format(message='Hi', fill='16')
str.format()
1つだけで{...}
他には何もないテンプレートには使用しないでください。format()
関数を使用するだけで、解析のオーバーヘッドを節約できますformat('Hi', '<16')
。
new(ish)文字列フォーマットメソッドを使用すると、ネストされたキーワード引数で楽しいことができます。最も単純なケース:
>>> '{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 '
あなたはこれを試すことができます:
print "'%-100s'" % 'hi'
"'%+100s'" % 'hi'
を期すために、スペースを右側に配置することで機能します'hi'
これを行う正しい方法は、公式ドキュメントに記載されている 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!
使用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.... '
これらの文字列フォーマット操作には、Python v2およびv3で機能するという利点があります。
pydoc str
いつか見てみましょう:そこにはたくさんの良いものがあります。
0を削除すると、代わりにスペースが追加されます。
>>> print "'%6d'"%4
スライスを使用する方がよりパイソンのようではないでしょうか?
たとえば、10文字になるまで文字列の右側にスペースを埋め込むには:
>>> x = "string"
>>> (x + " " * 10)[:10]
'string '
15文字になるまで左側にスペースを入れます。
>>> (" " * 15 + x)[-15:]
' string'
もちろん、パディングしたい長さを知る必要がありますが、最初の文字列の長さを測定する必要はありません。
''.join(reversed(str))
は、はpythonicよりも言っているようなものstr[::-1]
です。
(x + " " * 10)[:10]
私の意見では、を使用するよりもはるかに複雑ですx.ljust(10)
。
さまざまな印刷形式の代わりに使用する素晴らしいトリック:
(1)右側にスペースを埋め込む:
('hi' + ' ')[:8]
(2)左側に先行ゼロを埋め込む:
('0000' + str(2))[-4:]
min_len = 8
その後、('hi' + ' '*min_len)[:min_len]
または('0'*min_len + str(2))[-min_len]
('0'*min_len + str(2))[-min_len:]
はむしろおもしろいですが、これはおもしろいので他の答えをお勧めします。
リスト内包表記を使用してそれを行うことができます。これにより、スペースの数についてのアイデアも得られ、1つのライナーになります。
"hello" + " ".join([" " for x in range(1,10)])
output --> 'hello '
s = "hi"
; s + (6-len(s)) * " "
代わりに(結果は否定的です。しかし、正確な問題に対処するフレームワーク機能を使用する回答は、維持が容易になります(他の回答を参照してください)
"%-6s" % s
左揃えと"%6s" % s
右揃えです。