Pythonで文字列・数値を右寄せ、中央寄せ、左寄せ

Modified: | Tags: Python, 文字列

Pythonで文字列strを右寄せ、中央寄せ、左寄せ(右揃え、中央揃え、左揃え)するには、rjust(), center(), ljust()メソッドを使う。数値(intfloat)を処理する場合はstr()で文字列に変換してから各メソッドを呼び出す。

右寄せ(右揃え): rjust()

文字列を右寄せ(右揃え)するにはrjust()メソッドを使う。

第一引数に生成する文字列の文字数を指定する。デフォルトでは空白(スペース)で埋められる。

s = 'abc'

print(s.rjust(8))
#      abc

print(type(s.rjust(8)))
# <class 'str'>

元の文字列の文字数以下の値を指定した場合は元の文字列のまま変化なし。

print(s.rjust(2))
# abc

第二引数に埋める文字を指定できる。2文字以上だとエラーTypeErrorとなる。例は省略するが、1文字であれば全角文字でも問題ない。

print(s.rjust(8, '*'))
# *****abc

# print(s.rjust(8, 'ab'))
# TypeError: The fill character must be exactly one character long

右寄せでゼロ埋め(ゼロパディング)する場合はzfill()という専用のメソッドが用意されている。rjust()は符号(+, -)を考慮しないが、zfill()は符号のあとからゼロで埋める。

s = '-123'

print(s.rjust(8, '0'))
# 0000-123

print(s.zfill(8))
# -0000123

ゼロ埋めについての詳細は以下の記事を参照。

中央寄せ(中央揃え): center()

文字列を中央寄せ(中央揃え)するにはcenter()メソッドを使う。

使い方はrjust()と同じ。埋める文字数が奇数の場合は右側が1文字多くなる。

s = 'abc'

print(s.center(8))
#   abc   

print(s.center(8, '*'))
# **abc***

print(s.center(9, '*'))
# ***abc***

print(s.center(10, '*'))
# ***abc****

左寄せ(左揃え): ljust()

文字列を左寄せ(左揃え)するにはljust()メソッドを使う。

使い方はrjust(), center()と同じ。

出力だと分かりにくいが、第二引数を省略した場合は後ろに空白(スペース)が追加されている。

s = 'abc'

print(s.ljust(8))
# abc     

print(s.ljust(8, '*'))
# abc*****

数値などに適用する場合

整数intや浮動小数点数floatといった数値など、文字列以外のオブジェクトを右寄せ、中央寄せ、左寄せしたい場合は、str()で文字列に変換してから各メソッドを呼び出す。

i = 123

print(type(i))
# <class 'int'>

print(str(i).rjust(8, '*'))
# *****123

print(str(i).center(8, '*'))
# **123***

print(str(i).ljust(8, '*'))
# 123*****

任意の書式変換: format(), f文字列

組み込み関数format()または文字列メソッドformat()で様々な書式変換ができる。文字列メソッドformat()では置換フィールド{}を使って文字列中に値を挿入できる。

詳しい使い方は以下の記事を参照。

右寄せ、中央寄せ、左寄せの場合は[埋める文字][埋める方向][全体の文字数]で書式を指定する。埋める方向はそれぞれ>, ^, <を使う。

s = 'abc'

print('right : {:*>8}'.format(s))
# right : *****abc

print('center: {:*^8}'.format(s))
# center: **abc***

print('left  : {:*<8}'.format(s))
# left  : abc*****

数値もそのまま変換可能。16進数に変換してゼロ埋め、というような処理もできる。ゼロ埋めの場合、埋める方向を省略すると右寄せになる。詳細は上記の関連記事参照。

i = 255

print('right : {:08}'.format(i))
# right : 00000255

print('right : {:08x}'.format(i))
# right : 000000ff

Python3.6からはf文字列(f-strings)も使用可能。より簡潔に書ける。

print(f'right : {i:08}')
# right : 00000255

print(f'right : {i:08x}')
# right : 000000ff

関連カテゴリー

関連記事