【Python】format()関数を使って書式変換を行う!サンプルコードあり!
画面に値を出力する際に、以下のように思ったことはありませんか?
・文字を右寄せににして出力したい。
・文字を中央寄せにして出力したい。
また、数字の計算で以下のように思ったことはありませんか?
・99から100になって表示された場合、画面からはみ出して表示された。
・小数第2の位までを表示したいが、少数の位が多く表示されてしまった。
format()関数を使うと左寄せ、右寄せ、中央寄せの位置を指定して出力できたり、少数の桁数を指定して出力することが可能になります。
今回はformat()関数を使って書式の変換について解説していきます。
目次
format()関数とは
先ほどもいいましたが、format()関数とは値の書式を設定して出力することができます。
format()関数の書き方
ormat()関数の構文は以下のようになります。
1 |
文字列.format(値1,....) |
パラメータ
・値1
整数、浮動小数点数値定数、文字列、文字、または変数
format()関数を使ったサンプルコード
ここでformat()関数を使ったサンプルコードを見てみます。
例
1 2 3 |
str = "{0}さんの血液型は{1}型で、出身地は{2}です。".format("鈴木", "AB", "東京") print(str) |
出力結果
鈴木さんの血液型はAB型で、出身地は東京です。
文字列の中に{番号}を追記し、format()関数でその番号に何を入れるのかを指定しています。
その為{0}には鈴木、{1}にはAB、{2}には東京が入って出力されてます。
format()関数の基本的な使い方
ここで、format()関数の基本的な使い方を見ていきます。
型(タイプ)を指定する
format()関数で肩を指定することができます。
例
1 2 3 |
str = "{0}さんの身長は{1:.1f}cm、体重は{2:.1f}kgです。".format("鈴木", 185, 72.6) print(str) |
出力結果
鈴木さんの身長は185.0cm、体重は72.6kgです。
このように後ろに「:.1f」とすることで、float型での少数一桁で数値が出力されます。
文字 | 説明 | 備考 |
---|---|---|
s | 文字列 | デフォルトなので、通常は省略 |
d | 整数(10進数) | 2進数はb、8進数はo、16進数はxまたはX |
eまたはE | 浮動小数点数(指数表記) | 大文字(E)の場合は指数表記にeでなくEが使われる |
fまたはF | 浮動小数点数(小数点表記) | 大文字(F)の場合はnanがNAN、infがINFと表示 |
幅(width)を指定する
幅は、桁数指定の前で指定します。
幅とは列の幅を揃えたい場合などに利用でき、幅に足りない部分は空白(スペース)で埋められます。
幅を指定するにはインデックスの後に、「:数字」を指定するすることで幅を指定することができます。
例
1 2 |
str = "{0:10.5f}, {1:20}, {2:20d}". format(13,"こんにちは", 12) print(str) |
出力結果
13.00000, こんにちは , 12
このように幅が指定されて出力されました。
整数型の場合は右に寄せられて出力されます。
文字の位置を指定する
文字の位置を指定するには:の後ろに「>」を指定し、「<」は右寄せ、「>」は左寄せ、「^」は中央寄せになります。
また、「0」を指定すると空白部分が0で埋まって出力されます。
例
1 2 3 4 5 6 7 8 9 10 |
str1 = "{:>20}".format("abcde") str2 = "{:<20}".format(123) str3 = "{:^20}".format(123) str4 = "{:07d}".format(135) print (str1) print (str2) print (str3) print (str4) |
出力結果
abcde
123
123
0000135
桁数を指定する
「:.番号f」のようにピリオド(.)の後に整数で番号を指定することで桁数を指定することができます。
また、桁数指定を文字列型に使用すると、文字数を制限できます。
例
1 2 3 4 5 6 7 8 9 10 11 12 |
fat1 = "{:.2f}".format(0.05) fat2 = "{:.5f}".format(0.05) print(fat1) print(fat2) str1 = "{:.3}".format("おはようございます。") str2 = "{:.7}".format("おはようございます。") print(str1) print(str2) |
出力結果
0.05
0.05000
おはよ
おはようござい
符号を指定する
指定した数値に符号をつけることで符号がついた状態で表示されます。
しかし、数値で「+」をつけるよう指定してもデフォルトが正の数なので、出力されません。
どうしても+をつけて出力したい場合は、文字列として出力しましょう。
例3
1 2 3 4 5 |
str1 = '数値: {}'.format(+1570) str2 = '数値: {:.3f}'.format(-454) print (str1) print (str2) |
出力結果
数値: 1570
数値: -454.000
桁を区切る
{:,}のようにカンマ(,)またはアンダースコア(_)を入れることで、3ケタごとに区切りを入れることができます。
例3
1 2 3 4 5 |
num1 = 'カンマで区切る場合: {:,}'.format(100000000) num2 = 'アンダースコアで区切る場合: {:_}'.format(23456897897) print (num1) print (num2) |
出力結果
カンマで区切る場合: 100,000,000
アンダースコアで区切る場合: 23_456_897_897
このように3桁ごとに桁数を区切ることができます。
進数指定する
{:b}のように指定することで、進数の指定をすることができます。
例3
1 2 3 4 5 |
print('2進数: {:b}'.format(1000)) print('8進数: {:o}'.format(1000)) print('10進数: {:d}'.format(1000)) print('16進数: {:x}'.format(1000)) print('16進数: {:X}'.format(1000)) |
出力結果
2進数: 1111101000
8進数: 1750
10進数: 1000
16進数: 3e8
16進数: 3E8
有効数字を指定する
{.番号g}とすることでと全体の桁数を指定できます。
小数点以下の末尾の0は省略されて出力されてしまうので注意が必要です。
例3
1 2 3 |
print('{:.2g}'.format(125)) print('{:.8g}'.format(123.43456669)) print('{:.3g}'.format(0.0001234)) |
出力結果
1.2e+02
123.43457
0.000123
パーセント表示を指定する
指定する文字列に%を指定すると、%を付けた文字列に変換することができます。
例3
1 2 3 |
print('{:%}'.format(1.2)) print('{:.2%}'.format(0.9999)) print('{:>.2%}'.format(0.1111)) |
出力結果
120.000000%
99.99%
11.11%
波括弧{}を使う場合
format()関数内で波括弧{ }を書きたい場合は{{ }}のように2回繰り返して書くことで{}を出力することができます。
例
1 |
print('{{{year}}}-{{{month}}}-{{{day}}}'.format(year="2020", month = "06", day = "07")) |
出力結果
{2020}-{06}-{07}
エスケープシーケンスを無効化する場合
文字列では特殊文字を表すためにバックスラッシュ\を使用しますが、文字列リテラルの先頭に「r」または「R」をつけることで、バックスラッシュによるエスケープを無効化して出力することができます。
例
1 2 3 |
print('こんにちは\nお元気ですか') print(r'こんにちは\nお元気ですか') |
出力結果
こんにちは
お元気ですか
こんにちは\nお元気ですか
rをつけない場合は\nが改行として出力されていますが、先頭にrをつけることで改行と認識されず、\nとして出力されます。
関連記事
ST
株式会社flyhawkのSTです。フライテックメディア事業部でのメディア運営・ライター業務なども担当。愛機はMac Book AirとThinkPad。好きな言語:swift、JS系(Node.js等)。好きなサーバー:AWS。受託開発やプログラミングスクールの運営をしております。ご気軽にお問い合わせください。