連載
» 2019年04月23日 05時00分 公開

Python入門:[Python入門]文字列の書式指定 (4/4)

[かわさきしんじ,Deep Insider編集部]
前のページへ 1|2|3|4       

format関数

 Pythonには、組み込みのformat関数も用意されている。

format関数

format(value, format_spec)

format関数の構文

 書式化したい値と、その書式指定を基に、書式指定が行われた文字列を返す。

引数/戻り値 説明
value 書式化したい値
format_spec 書式指定(省略可能)
戻り値 format_specに従って、valueを書式指定したもの
format関数の引数と戻り値


 実際の利用例を以下に示す。

print(format(65, 'c'))
print(format(1234.567, '.2g'))
print(format(12.345, '0=+10'))

format関数の使用例

 書式指定として渡される文字列は、予想が付く方もいるだろうが、既に見てきた置換フィールド内でコロン「:」に続ける書式指定と同じだ。コロンも置換フィールドを意味する「{}」も必要ないことには注意しよう。

 この指定を省略した場合には、Pythonが組み込みで提供しているstr関数に、第1引数valueを渡したものが戻り値になる。str関数は、引数に渡されたオブジェクトを文字列化する関数だ(第5回の「文字と数値の変換:str/int/float関数」節も参照されたい)。

 実行結果を以下に示す。

実行結果 実行結果

フォーマット済み文字列

 第5回の「フォーマット済み文字列(f文字列)」節では、変数や計算式の値を埋め込んだ「フォーマット済み文字列」(f文字列)について簡単に説明した。実は、f文字列の作成時にも上で見た書式指定を行える。

 使い方は簡単で、f文字列内に埋め込みたい値を記述した「式」(変数や計算式、関数呼び出しなど)の後にコロン「:」を置き、それに続けて書式指定子を記述していくだけだ。利用例を以下に示す。

x = 1
y = 100
result = f'{x:0=+8} + {y:<8} = {x + y:$^8}'
print(result)

f文字列での書式指定の利用例

 実行結果を以下に示す。

実行結果 実行結果

%演算子を使った文字列の書式指定

 本稿で説明してきたformatメソッドは、Pythonにおいては「新しい形式の文字列の書式指定方法」だ。ということは、「古い形式の文字列の書式指定方法」もある。それが「%演算子を使用した文字列の書式指定」だ。古い形式ではあるが、今でもよく使われているので、少しだけ説明をしておこう。

 %演算子による書式指定は次のような形式を取る。

  • '書式指定に使う変換指定子を含んだ文字列' % 埋め込む値をまとめたタプル

 %演算子の左側には「%s」「%(some_sumber)08d」などの「変換指定子」を含んだ文字列を置く(formatメソッドの呼び出しに使う書式指定文字列に相当)。C言語などに触れた経験がある人にはなじみ深いものといえる。右側には、そこに埋め込む値を「タプル」と呼ばれるデータ構造にまとめたものを置く。ここではかっこ「()」の中にカンマ区切りで変換指定子に埋め込むデータを並べたものだと考えてほしい(埋め込む値が1つであれば、タプルにまとめる必要はない)。

 変換指定子は大まかに書くと次のようになる。

  • %(マップキー)「変換フラグ」「最小の表示幅」「.精度」「変換型」

 必須なのは、変換指定子を始める「%」と「変換型」の2つ(例:「%d」)。「変換フラグ」には「#」(別形式)、「0」(0埋め)、「-」(左寄せ)、「 」(正数には符号の代わりに空白文字を付加)、「+」(常に符号を表示)を指定できる。formatメソッドとは指定方法が少し違うことに注意しよう。「最小の表示幅」と「.精度」の指定はformatメソッドと同様だ。「変換型」にも上で見た「表示型」と似た指定を記述できる。

 簡単な例を以下に示す。

print('%d + %d = %d' % (1, 2, 1 + 2))
print('%#x' % 65535)

%演算子による書式指定の例

 最初のprint関数呼び出しの中では、「%d」という「変換指定子」を3つ使っている(この文字列中にある「%」は演算子ではなく、「ここに値を埋め込む」ことを意味する指定だ)。「d」は「10進数で表示する」ことを意味する変換型の指定だ。

 文字列の右側には、書式指定を行うことを意味する%演算子があり、その右側に数値「1」「2」と計算式「1 + 2」をまとめた「タプル」がある(タプルについては以降の回で説明をするが、ここでは「かっこに囲んで、任意のデータをカンマ区切りで並べたもの」と考えてほしい)。かっこに囲まれた3つの値が3つある変換指定子「%d」の位置に順に埋め込まれる。

 次のprint関数呼び出しの中では、「%#x」という変換指定子を使っている。「#」は上の「表示型(type)の指定」で取り上げた「別形式」での表示を意味する。その右にある「x」は「16進数で表示する」ことを指示する変換型の指定だ。

 実行結果を見てみよう。

実行結果 実行結果

 書式指定が行われ「1 + 2 = 3」という文字列や、別形式指定により「0x」を前置した16進数表記を含んだ「0xffff」という文字列ができていることが分かる。

 もう1つ例を示そう。今度は置換フィールドに名前を付けるのに似た、「マップキー」という指定を追加したものだ。

'%(x)+.2e + %(y)+.2f = %(z)08.2f' % {'x': 1.1, 'y': -2.2, 'z': 1.1 + -2.2}

マップキーとして「(x)」「(y)」「(z)」を使った例

 マップキーはかっこ「()」の中に記述する。そして、この場合は%演算子の右側にはタプルではなく、「辞書」を置く(「辞書を引数としてformatメソッドを呼び出す」も参照)。辞書の各キーと各マップキーが対応していることにも注意しよう。

 上のコードでは、他にも変換型として「e」と「f」、ドット「.」に続けて書く「精度」(有効桁数)も指定している。この辺りの書き方は、どちらの方法でも同様だ。

 実行結果を以下に示す。

実行結果 実行結果

 古い形式の書式指定を読むときには、formatメソッドでは「{置換フィールド名:書式指定}」だったのが、古い形式では「%(キーマップ)書式指定」となっていることに留意しよう。既に述べたが変換フラグの指定方法がformatメソッドとは少々異なっているところもある点にも注意が必要だ。

まとめ

 今回は、Pythonの文字列の書式指定について、formatメソッドを中心に見てきた。現在では、変数の値や計算結果を埋め込んで書式指定した文字列を作成するには、f文字列かformatメソッドを使うのがよいだろう。特にf文字列は、formatメソッドを呼び出すよりもシンプルに必要なものを記述できるので、Python 3.6以降が使える環境であれば、f文字列を積極的に使いたいところだ。

今回のまとめ:Pythonの文字列の書式指定

  • Pythonでの文字列の書式指定には文字列のformatメソッド、f文字列、%演算子が使える
  • formatメソッドでは「'書式指定文字列'.format(埋め込む値)」形式で、文字列を作成する
  • 「書式指定文字列」には角かっこ「{}」で囲まれた「置換フィールド」を含める。ここにformatメソッドに渡された引数が埋め込まれる
  • 「置換フィールド」にはインデックスや名前を付けられる。名前を付けた場合にはformatメソッドには「フィールド名=その値」として値を渡すか、埋め込む値をまとめた辞書を渡す
  • 「置換フィールド」ではさまざまな書式指定を行える
  • 書式指定では0埋め、文字寄せ、符号表示、表示幅、有効桁数、表示型などを指定できる
  • f文字列では「{式:書式}」として、文字列内に変数や計算式、関数呼び出しなどの結果を書式指定して埋め込める
  • %演算子による書式指定は、「'変換指定子を含んだ文字列' % タプルや辞書」という形式を取る
  • 変換指定子には、マップキー、0埋め、文字寄せ、最小の表示幅、変換型などを指定できる

「Python入門」のインデックス

Python入門

前のページへ 1|2|3|4       

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。