Pythonを使い始めて少しすると、Pythonで文字列を作成する際に” “を使われていると思います。
それ自体は、何も悪いことではありません。みなさんが最初に書いたPythonのコードは、print(“Hello World”)でしょうから、””を使うのは自然なことです。
ここでは、次のレベルに進化するための、f-stringsを使うための方法を詳しく説明していきます。
Python 3.6にてf-stringsは導入され、文字列のフォーマットをより高いレベルで実現することができます。
この記事では、Pythonでf-stringsを使って文字列をフォーマットする方法を説明し、変数、カンマ区切り、ゼロによる右詰め/左詰め、日付などを追加する方法を学びます。
基本的なf-string の使い方
f-string は文字列に変数を追加するための構文です。
例としては、Pythonでf-stringを使って2つのメッセージを表示します。
そのためには、通常の文字列を作るときに使う”の前にfを付けます。また、文字列の中に変数を挿入するために{}を追加します。
age = 30
height = 180
body_weight = 80
print(f'あなたの年齢は、{age}歳です。')
print(f'身長={height}')
print(f'体重={body_weight}')
# 出力結果
あなたの年齢は、30歳です。
身長=180
体重=80
このように、f-stringを使って変数を追加することで、従来の方法である普通の文字列を使った方法や+演算子を使うより簡単に文字列を表現することができます。
さらに、=を活用して、変数の後に=を入力する{name=}
の構文を利用することで、さらに便利な使い方ができます。
age = 30
height = 180
body_weight = 80
print(f'{age=}')
print(f'{height=}')
print(f'{body_weight=}')
# 出力結果
age=30
height=180
body_weight=80
=を変数の後に入力して使うことで、変数名と変数を同時に出力させることができます。
1つの変数を書くだけで良いので、デバックもしやすくなるため、おすすめの方法です。
0のパディング(Padding)
ここでは、数字の左側や右側にゼロを付けて書式を整える方法について解説します。
ゼロを使った右詰め
初めに、パディング文字を選ぶことができます。
今回は、パディングキャラクターとして0を選択し、以下のfloatの小数点以下が6桁になるようにします。6桁にするために0<7と指定しています。
x = 12.345
print(f'{x:0<7}')
# 出力結果
12.3450
しかし、桁数を指定する方法だと、0を足した後の最終的な幅を計算しなければならないので、計算が複雑になります。
代わりに小数点の数を考えるこちらの方法を使うことが多いです。
ここでは、小数点以下が5桁になるまで0を追加してみます。
x = 12.345
print(f'{x:.5f}')
# 出力結果
12.34500
左詰めする方法
今回ご紹介する方法は、数字を使ってカスタマイズした書式を作るときに非常に便利な方法です。
例として、次のような書式を取得したいとします。YYYYMMDDと、1~9の普通の数字があります。この場合、月と日の左側に0を追加する必要があります。
早速、これらのやり方を2通り紹介します。
year = 2022
month = 10
day = 2
# 2通りのやり方
print(f'{year}{month:0>2}{day:0>2}')
print(f'{year}{month:02d}{day:02d}')
# 出力結果
20221002
20221002
このようにすることで、数字のカスタマイズを行うことができます。
パーセント表示にする
ここでは、数字を丸めてパーセント表示する方法について説明します。
x = 12.345
print(f'{x:.1f}%')
# 出力結果
12.3%
浮動小数点を “n “桁に丸める
ここでは、浮動小数点を “n “桁に丸める方法について説明します。
x = 12.345
print(f'{x:.1f}')
# 出力結果
12.3
コンマを千の区切り文字として利用
ここでは、通貨を示す方法として、コンマを区切り文字として使う方法について解説します。
x = 123456789
print(f'{x:,}')
# 出力結果
123,456,789
日付の書式設定
ここでは、日付を表現する方法を説明します。
datetimeで日時を取得し、f-stringsを利用して形式を自由自在に変更します。
import datetime
now = datetime.datetime.now()
print(f'{now=:%m-%d-%Y}')
print(f'{now=:%m%d%Y}')
# 出力結果
now=10-02-2022
now=10022022