『Python数値計算ノート』ではアフィリエイトプログラムを利用して商品を紹介しています。

差し込み処理と書式指定

“{}は2年次の必須科目です” というように、一部を空白にした定型文章を用意しておいて、{} に任意の文字を入れることを差し込み処理といいます。Python では、このような差し込み処理を行なうために、文字列に format メソッドが備えられています。
 

str.format()

str.format(x) は文字列に含まれる {} の中に x を差し込みます。

# PYTHON_FORMAT

# In[1]

# 名前の差し込み処理
subject = "{}は2年次の必須科目です".format("情報代数学")

print(subject)
# 情報代数学は2年次の必須科目です

定型文の {} にリストの要素を順に差し込む処理をする場合は、for 構文を使って次のようなコードを書きます。

# In[2]

subject = "{}は2年次の必須科目です。"

# 科目のリストを用意
subject_list = ["論理回路", "アルゴリズム論", "プログラミング技法"]

# 差し込み処理
for x in subject_list:
    y = subject.format(x)
    print(y)

# 論理回路は2年次の必須科目です。
# アルゴリズム論は2年次の必須科目です。
# プログラミング技法は2年次の必須科目です。

文字列の中に {0} や {1} のように整数を指定すると、対応する位置引数が差し込まれます。たとえば、”{0}+{1}”.format(x, y) と記述すると、{0} に x, {1} に y が差し込まれて、”x + y” という文字列が作られます。

# In[3]

#位置引数を指定して差し込みます
subject = "{0},{1},{2}".format("情報統計学", "計算量理論", "データ科学")

print(subject)
# 情報統計学, 計算量理論, データ科学

キーワード引数を指定して差し込むこともできます。たとえば文字列に含まれる { } の中に keyword1 を記述して、formatメソッドの引数を keyword1 = x のような形で指定すると、{keyword1} に x が差し込まれます。以下のサンプルコードでは title と url をキーワード引数としています。

# In[4]

my_str = "{subject}の講義は{name}教授が担当します"

x = "情報解析学"
y = "花塚"

my_str = my_str.format(subject = x, name= y)

print(my_str)
# 情報解析学の講義は花塚教授が担当します

あらかじめディクショナリを用意しておけば、文字列の中の {0[key]} と記述したところに、key に対応する値 (value) が差し込まれます。

# In[5]

# 科目名と担当教授のディクショナリ
my_dic = {"subject":"ソフトウェア工学", "name":"螢原"}

# 差し込み位置にキーを指定
my_str = "{0[subject]}の講義は{0[name]}教授が担当します。"

# ディクショナリを使って差し込み処理を実行
my_str = my_str.format(my_dic)

print(my_str)
# ソフトウェア工学の講義は螢原教授が担当します。

コロン(:)を添えると差し込む文字列の書式を指定できます。
たとえば、{:,} に数字を差し込むと、3 桁ごとにカンマで区切ります。

# In[6]

# 3桁ごとにカンマで区切る
x = "{:,}円".format(12000)
y = "{:,}円".format(7852000)

print(x, y)
# 12,000円 7,852,000円

{:.x%} のように記述すると、差し込まれた数字を小数点以下 x 桁までのパーセンテージ表示に変換します。

# In[7]

# 数字をパーセンテージで表示
# "." のあとに小数点以下の桁数を指定
x = "{:.2%}".format(1/3)
y = "{:.3%}".format(1/3)
z = "{:.4%}".format(1/3)

print(x, y, z)
# 33.33% 33.333% 33.3333%

コロン (:) のあとに、[埋める文字][埋める方向][全体の文字数] を指定して、差し込む文字を寄せることができます。[埋める文字] を省略すると空白が埋め込まれます。

# In[8]

# 11文字の長さをとって左寄せ、残りはaで埋める
str_left = "{:a<11}".format("情報論理学")

# 11文字の長さをとって右寄せ、残りはaで埋める
str_right = "{:a>11}".format("情報論理学")

# 11文字の長さをとって中央寄せ、残りは空白で埋める
str_center = "{:^11}".format("情報論理学")

print(str_left)
print(str_right)
print(str_center)
# 情報論理学aaaaaa
aaaaaa情報論理学
   情報論理学

f文による埋め込み処理

Python3 から f 文 (フォーマット済み文字列リテラル) とよばれる埋め込み機能が追加されました。f のあとにクォーテーションまたはダブルクォーテーションで囲った文字列を記述し、その中に { } が含まれていれば、そこに文字列を埋め込むことができます。書式の指定方法は format() メソッドと同じです。以下に f 文を使ったサンプルコードをいくつか載せておきます。

# PYTHON_F_STRING

# In[1]

x = "3"
y = "情報社会論"

my_str = f"{x}年の秋学期には{y}を履修するつもりです。"

print(my_str)
# '3年の秋学期には情報社会論を履修するつもりです。'

# In[2]

# 3桁ごとにカンマで区切る
x = f"{4526000:,}円"

print(x)
# 4,526,000円

# In[3]

num = 1/3

# 数字をパーセンテージで表示
# "." のあとに小数点以下の桁数を指定
x = f"{num:.2%}"
y = f"{num:.3%}"
z = f"{num:.4%}"

print([x, y, z])
# [33.33% 33.333% 33.3333%]

コメント

  1. あとりえこばと より:

    【プログラミング日記】wp codehighlight.js というプラグインをインストールしたことで、当サイトは軽量なシンタックスハイライト機能を備えることになりました。表示される Python コードのフォントが、なかなか見やすくて綺麗だったので、いったいどんなフォントを使っているのか知りたく思って、あちらこちらのサイトをググってみましたが、どこにもそれらしき情報は落ちていません。

    それならプラグインの収められたファイルを覗けばわかるだろうと思って、管理画面からディレクトリをずるずると辿ってみることにしたけれど、やはりどこにも見当たらず、
    「そもそもプラグインって、どこにあるんだっけ?」
    と首を傾げて考え込みました。なにしろ、普段はプラグインのファイルをいじることなんてまずありません。どうせ触ると壊れるに決まっているからです(←本当にWeb屋か?)。そんなわけで、今度は「プラグインが何処にあるのか」ということをググって探してみることにしました(← 三流エンジニアなので、こんなふうに断片的に知識を集めようとする)。