Pythonで文字列・数値を右寄せ、中央寄せ、左寄せ
Pythonで文字列str
を右寄せ、中央寄せ、左寄せ(右揃え、中央揃え、左揃え)するには、rjust()
, center()
, ljust()
メソッドを使う。数値(int
やfloat
)を処理する場合は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