文字列にスペースを入れたい。私は以下がゼロに対して機能することを知っています:
>>> print "'%06d'"%4
'000004'
しかし、これが必要な場合はどうすればよいですか?:
'hi '
もちろん弦の長さを測ってやることもできますstr+" "*leftover
が、最短の方法でお願いします。
文字列にスペースを入れたい。私は以下がゼロに対して機能することを知っています:
>>> print "'%06d'"%4
'000004'
しかし、これが必要な場合はどうすればよいですか?:
'hi '
もちろん弦の長さを測ってやることもできますstr+" "*leftover
が、最短の方法でお願いします。
あなたはこれを行うことができますstr.ljust(width[, fillchar])
:
長さwidthの文字列で左寄せされた文字列を返します。パディングは、指定されたfillcharを使用して行われます(デフォルトはスペースです)。widthが。未満の場合、元の文字列が返され
len(s)
ます。
>>> 'hi'.ljust(10)
'hi '
複雑な文字列をフォーマットする場合でも機能する柔軟な方法については、おそらく文字列フォーマットのミニ言語を使用する必要があります。
いずれかのf文字列を使用する
>>> f'{"Hi": <16} StackOverflow!' # Python >= 3.6
'Hi StackOverflow!'
またはstr.format()
方法
>>> '{0: <16} StackOverflow!'.format('Hi') # Python >=2.6
'Hi StackOverflow!'
new(ish)string formatメソッドを使用すると、ネストされたキーワード引数を使用して楽しい作業を行うことができます。最も単純なケース:
>>> '{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 '
そして、これらすべてに、python3.6+f-stringsを使用できます。
message = 'Hi'
fill = ' '
align = '<'
width = 16
f'{message:{fill}{align}{width}}'
そしてもちろん結果:
'Hi '
あなたはこれを試すことができます:
print "'%-100s'" % '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.... '
これらの文字列フォーマット操作には、Pythonv2およびv3で機能するという利点があります。
いつか見てみましょうpydoc str
。そこにはたくさんの良いものがあります。
Python 3.6の時点で、あなたはただ行うことができます
>>> strng = 'hi'
>>> f'{strng: <10}'
リテラル文字列補間を使用します。
または、パディングサイズが次のように変数に含まれている場合(@Matt M.に感謝):
>>> to_pad = 10
>>> f'{strng: <{to_pad}}'
文字列を中央に配置することもできます。
'{0: ^20}'.format('nice')
f-stringsリテラル補間Python3.6
を使用できるため。
可変スペース:
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
他の文字とスペースを埋める場合は、最初に指定します。
value = 4
space = 10
padd = '_'
print(f'foo {value:{padd}^{space}} bar') # foo ____4_____ bar
print(f'foo {value:_^10} bar') # foo ____4_____ bar
0を削除するだけで、代わりにスペースが追加されます。
>>> print "'%6d'"%4
スライスを使用する方がよりPython的ではないでしょうか?
たとえば、10文字の長さになるまで、右側にスペースを入れて文字列を埋めるには、次のようにします。
>>> x = "string"
>>> (x + " " * 10)[:10]
'string '
15文字になるまで左側にスペースを埋めるには:
>>> (" " * 15 + x)[-15:]
' string'
もちろん、パディングする長さを知る必要がありますが、開始する弦の長さを測定する必要はありません。
さまざまな印刷形式の代わりに使用するための優れたトリック:
(1)右側にスペースを埋める:
('hi' + ' ')[:8]
(2)左側に先行ゼロが付いたパッド:
('0000' + str(2))[-4:]
リスト内包表記を使用してそれを行うことができます。これにより、スペースの数もわかり、1つのライナーになります。
"hello" + " ".join([" " for x in range(1,10)])
output --> 'hello '