645

文字列にスペースを入れたい。私は以下がゼロに対して機能することを知っています:

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

しかし、これが必要な場合はどうすればよいですか?:

'hi    '

もちろん弦の長さを測ってやることもできますstr+" "*leftoverが、最短の方法でお願いします。

4

14 に答える 14

872

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

長さwidthの文字列で左寄せされた文字列を返します。パディングは、指定されたfillcharを使用して行われます(デフォルトはスペースです)。widthが。未満の場合、元の文字列が返されlen(s)ます。

>>> 'hi'.ljust(10)
'hi        '
于 2011-04-15T12:24:56.583 に答える
484

複雑な文字列をフォーマットする場合でも機能する柔軟な方法については、おそらく文字列フォーマットのミニ言語を使用する必要があります。

いずれかのf文字列を使用する

>>> f'{"Hi": <16} StackOverflow!'  # Python >= 3.6
'Hi               StackOverflow!'

またはstr.format()方法

>>> '{0: <16} StackOverflow!'.format('Hi')  # Python >=2.6
'Hi               StackOverflow!'
于 2011-04-15T12:41:24.340 に答える
172

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              '
于 2014-08-13T18:40:28.480 に答える
85

あなたはこれを試すことができます:

print "'%-100s'" % 'hi'
于 2011-04-15T12:24:46.907 に答える
80

これを行う正しい方法は、公式ドキュメントで説明されている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!
于 2016-07-21T13:33:34.280 に答える
49

使用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。そこにはたくさんの良いものがあります。

于 2011-04-15T12:27:45.173 に答える
37

Python 3.6の時点で、あなたはただ行うことができます

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

リテラル文字列補間を使用します。

または、パディングサイズが次のように変数に含まれている場合(@Matt M.に感謝):

>>> to_pad = 10
>>> f'{strng: <{to_pad}}'
于 2016-07-06T16:05:40.550 に答える
20

文字列を中央に配置することもできます。

'{0: ^20}'.format('nice')
于 2012-07-24T16:14:48.763 に答える
10

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
于 2021-09-17T08:55:08.037 に答える
9

文字列にはPython2.7のミニフォーマットを使用します。

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

この左揃えで、''文字で8文字にパディングされます。

于 2011-04-15T12:58:51.807 に答える
5

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

>>> print  "'%6d'"%4
于 2015-06-12T13:30:02.597 に答える
3

スライスを使用する方がよりPython的ではないでしょうか?

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

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

15文字になるまで左側にスペースを埋めるには:

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

もちろん、パディングする長さを知る必要がありますが、開始する弦の長さを測定する必要はありません。

于 2015-09-15T06:09:20.473 に答える
0

さまざまな印刷形式の代わりに使用するための優れたトリック:

(1)右側にスペースを埋める:

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

(2)左側に先行ゼロが付いたパッド:

('0000' + str(2))[-4:]
于 2019-01-29T19:40:33.810 に答える
-4

リスト内包表記を使用してそれを行うことができます。これにより、スペースの数もわかり、1つのライナーになります。

"hello" + " ".join([" " for x in range(1,10)])
output --> 'hello                 '
于 2018-11-23T13:34:45.867 に答える