web-dev-qa-db-ja.com

Pythonの文字列をスペースで埋め込むにはどうすればいいですか?

文字列をスペースで埋めたい。私は以下がゼロのために働くことを知っています:

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

しかし、これが欲しいときはどうすればいいですか?

'hi    '

もちろん、文字列の長さを測定してstr+" "*leftoverを実行することもできますが、最短の方法が欲しいのです。

421
taper

str.ljust(width[, fillchar]) でこれを行うことができます。

長さの文字列で左揃えされた文字列を返します。パディングは、指定されたfillcharを使用して行われます(デフォルトはスペースです)。 widthlen(s)より小さい場合、元の文字列が返されます。

>>> 'hi'.ljust(10)
'hi        '
591
Felix Kling

Python 2.5をサポートする必要がなければ、 文字列フォーマットのミニ言語 を使うことができます(そしておそらくそうすべきです):

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

新しい(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              '
94
CivFan

これを試すことができます:

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

これを行う正しい方法は、 公式ドキュメント で説明されているように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!
37
Granitosaurus

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 いつか見てください:そこにはたくさんの良いものがあります。

34
Johnsyweb

Python 3.6では、あなたはただできるだけです。

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

リテラル文字列補間付き

あるいは、あなたのパディングサイズが次のように変数の中にあるならば(ありがとう@Matt M.!):

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

center あなたの文字列もできます。

'{0: ^20}'.format('Nice')
17
Remi

文字列にはPython 2.7の ミニフォーマットを使用してください

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

これで左揃えになり、8文字に ''文字で埋め込まれます。

7
aodj

0を削除するだけで、スペースが追加されます。

>>> print  "'%6d'"%4
5
Amir Mofakhar

スライスを使用するほうがPythonicではないでしょうか。

たとえば、10文字の長さになるまで文字列の右側にスペースを埋め込むには、次のようにします。

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

15文字の長さになるまで、左側にスペースを埋めます。

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

もちろん、どれだけ長くパディングしたいのかを知る必要がありますが、始めの弦の長さを測定する必要はありません。

3
Zev Chonoles

あなたはリスト内包表記を使ってそれをすることができます、これはあなたにスペースの数についてもあなたに考えを与えるでしょう、そしてそれは一つのライナーになるでしょう。

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

さまざまな印刷形式の代わりに使用するのにいいコツ:

(1)右側を空白で埋めます。

('hi' + '        ')[:8]

(2)左側に先行ゼロを埋めます。

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

+ =は文字列に追加するために使用できます

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