note.nkmk.me

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

Date: 2018-06-11 / tags: Python, 文字列操作
このエントリーをはてなブックマークに追加

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

ここでは以下の内容について説明する。

  • 右寄せ(右揃え): rjust()
  • 中央寄せ(中央揃え): center()
  • 左寄せ(左揃え): ljust()
  • 数値に適用する場合
  • 任意の書式変換: format(), f文字列
スポンサーリンク

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

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

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

s = 'abc'

s_rjust = s.rjust(8)

print(s_rjust)
#      abc

print(type(s_rjust))
# <class 'str'>

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

print(s.rjust(2))
# abc

第二引数に埋める文字を指定できる。全角文字でも問題ないが、2文字以上だとエラーTypeErrorとなる。

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

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

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

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

s_n = '-123'

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

print(s_n.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()で文字列に変換してから各メソッドを呼び出す。

n = 123

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

print(str(n).rjust(8, '@'))
# @@@@@123

print(str(n).center(8, '@'))
# @@123@@@

print(str(n).ljust(8, '@'))
# 123@@@@@

任意の書式変換: format()

組み込み関数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進数に変換してゼロ埋め、というような処理もできる。詳細は上記の関連記事参照。

n = 255

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

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

Python3.6からはf文字列(フォーマット文字列)も使用可能。それより前のバージョンでは使えないので注意。

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

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

f文字列についての詳細は以下の記事を参照。

スポンサーリンク
シェア
このエントリーをはてなブックマークに追加

関連カテゴリー

関連記事