文字列の書式設定はPython2.6からformatメソッドが追加され、%演算子を使った古い文字列書式設定よりも、このformatメソッドを使った方がよいと思います。でも、Pythonのチュートリアルで簡単に紹介されていますし、古いコードでは%演算子が使われてます。そこで、「まずは、このくらい知っておけばいいのでは」という程度にまとめてみたいと思います。
なお、以下関連記事です。
関連記事:「% 演算子」の書式設定において、桁数を「*」で表記する方法
<記事概要>「%演算子」による文字列書式設定において、桁数の部分を「*」で表現し、桁数を引数で渡す方法があります。この方法は、localeモジュールのlocale.format()やlocale.forma_string()でも同様ですので、サンプルコードにより使い方を簡単に整理します。
0.チュートリアル学習のポイントシリーズ、関連記事
この記事は「チュートリアル学習のポイントシリーズ」の記事です。一連の記事のリンクは、以下を参照してください。
Pythonチュートリアルの学習のポイントを整理
1.最初に覚えるべきこと
まず、最初に覚えるべき基本事項について説明します。このくらい知っていれば、書籍などのコードを読むときに、ざっとした内容は理解できるのではないでしょうか。
(1) %演算子を使った古い文字列書式設定の方法
%演算子を使った文字列の書式設定は、「format % values 」という書き方で書式設定を行います。そして、 左側の(format)の中%d, %fなどの位置に 右側の引数(values)を表示します。このとき、右側の引数をそのまま表示するのではなく、フォーマット指定子(%d,%fなど)によって、表示する書式を指定することができます。
「format (%dなどを含む文字列)」 % 「values (1つ以上の引数)」
format :
%d, %fなどの「フォーマット指定子」を含む文字列
表示書式を「フォーマット指定子」により指定できる。
values:
valuesの値がformatの%d,%fなどの位置に表示される。
複数の値を引数として渡す場合にはタプルを用いる。
valuesを辞書型にすれば、左側のformat側からキーワードで指定できる。
formatとvaluesの間の「%」:
「%演算子」です。「フォーマット指定子」と名称を混同しないようにしましょう。
(2) 最初に覚える3つのサンプルコード
言葉ではわかりにくいので、実際のサンプルコードを見てみましょう。コード01のように、複数の値を引数として渡す場合にはタプルを用います。また、引数を辞書とし、キーワードで指定することができ、その場合にはフォーマット指定子の%の直後に(キーワード)を挿入します。
#コード01 print('%sは好き。' % 'チョコ') print('%sは好き。%sは苦手。' % ('チョコ', 'マシュマロ')) print('%(key1)s好き。%(key2)s苦手。' % {'key1':'アメ', 'key2':'ラムネ'})
#出力01 チョコは好き。 チョコは好き。マシュマロは苦手。 アメ好き。ラムネ苦手。
(3) キーワードの指定には「'」は必要ない
コード02は辞書の要素を参照する単純なコードですが、コード02はx['key1']のようにkey1の両側に「'」があります。しかし、%演算子でキーワード指定する場合には、コード01の「%(key1)s」のように、key1の両側に「'」がないことに注意しましょう。
#コード02 x = {'key1':'チョコ', 'key2':'マシュマロ'} print(x['key1'])
#出力02 チョコ
(4) 主なフォーマット指定子
主なフォーマット指定子は以下の通りです。なお、format()メソッドを使った新しい書式指定方法では{:b}により、2進数に変換することができますが、 %演算子を用いた古い書式指定方法では2進数に変換するフォーマット指定子がありません。
指定子 | 説明 |
%d | 符号付き10進整数 |
%f | 10進浮動小数点数 |
%e | 指数表記の浮動小数点数(eが小文字) |
%E | 指数表記の浮動小数点数(Eが大文字) |
%o | 符号付き8進数 |
%x | 符号付き16進数(xが小文字) |
%X | 符号付き16進数(Xが大文字) |
%s | str()で変換した文字列 |
%r | repr()で変換した文字列 |
%a | ascii()で変換した文字列 |
(5) 全体桁数の指定(%d, %sなど)
%のあとに表示桁数を指定することができます。以下、具体的な表示方法の例を示します。
指定子の使用例 | 説明 |
%d, %s | 全体桁数無指定 |
%10d, %10s | 全体桁数10 ※数字も文字列も右寄せ |
(6) 全体桁数、少数部桁数の指定(%f, %eなど)
不動点小数点数などは、全体桁数だけでは無く、小数部の桁数も指定できます。以下、具体的な指定方法です。
なお、「%10f」では小数部分の桁数は6桁になりますが、「%10.f」「%.f」では、小数部分が表示されなくなりますので、注意する必要があります。
指定子の使用例 | 説明 |
%f | 全体桁数無指定、(ディフォルト:少数部桁数6) |
%10.5f | 全体桁数10, 小数部桁数5 |
%.5f | 全体桁数無指定、小数部桁数5 |
%10f | 全体桁数10、(ディフォルト:小数部桁数6) |
%10.f | 全体桁数10 、小数部表示されない →整数部のみ表示(%10.0fと同じ出力結果) |
%.f | 全体桁数無指定、少数部表示されない →整数部のみ表示(%.0fと同じ出力結果) |
%10.fと%.fの出力については、以下のコードを参考にしてください。なお、2行目の「print('1234567890■出力位置■')」は、2行目より後のコードの出力が何文字目に配置されるかを、わかりやすくするために出力しています。3~6行目の「■」は出力の終了位置を明確にするために追加した文字列です。
また、%10.fと%.fの を積極的に使うことはないと思いますが、注意喚起のため表に加えました。
#コード03 print('1234567890■出力位置■') print('%10.f■' % 3.14) print('%.f■' % 3.14) print('%10.e■' % 3.14) print('%.e■' % 3.14)
#出力03 1234567890■出力位置■ 3■ 3■ 3e+00■ 3e+00■
2.補足説明
ここまでの説明で、%演算子の基本的な説明は終了です。この章では、もう少し細かい部分について説明を補足します。
(1) 引数の型変換
それぞれのフォーマット指定子は、変換元のデータの型が決まっています。例えば、数値は%sにより、str型には変換できます。しかし、文字列を%dや%fにより数値に変換することはできません。
#コード04 print('%s' % 999) #数値もstr型に変換される #エラー:文字列は10進整数に変換されない。 #print('%d' % '999') #エラー:文字列は10進浮動小数点数に変換されない。 #print('%f' % '999')
(2) 全体桁数を指定した場合の右寄せ、左寄せ
全体桁数を指定した場合、数値も文字列も右揃えになります。なお、format()メソッドを用いた新しい文字列書式設定では数値は右寄せ、文字列は左寄せになります。
#コード05 print('1234567890■出力位置■') print('%d■' % 999) print('%s■' % 'abc') print('%10d■' % 999) print('%10s■' % 'abc')
#出力05 1234567890■出力位置■ 999■ abc■ 999■ abc■
(3) 指定した全体桁数を超える場合
コード06では、いずれも出力結果が指定した桁数5を超えています。このように、指定した桁数を超えた場合、一部が削除されるのではなく、指定桁数を超えた部分も全て表示されます。
なお、4行目の%5fは、小数点以下の指定が省略されているため、小数点以下の桁数はディフォルトの6桁となります。したがって、3.14は3.140000となり、全体桁数の5を超えて表示されます。ついつい、小数点以下が6桁になることを忘れてしまうので注意しましょう。
#コード06 print('1234567890■出力位置■') print('%5d■' % 1234567890) print('%5f■' % 3.14)
#出力06 1234567890■出力位置■ 1234567890■ 3.140000■
3.おまけコード( %f , %E, %eの桁数指定)
おまけコードとして、%f, %E, %eの桁数指定のサンプルコードを列挙します。コードがだらだらと長いので、本文からはずしました。
(1) %fのサンプルコード
3行目の「print('%f←終了位置' % 3.14, '%f')」において、%より右に「3.14」と 「'%f'」がありますが、「'%f'」は%演算子の引数ではありません。なぜなら、「3.14」と 「'%f'」はタプルではないからです。複数の値を引数とする場合は、タプルにする必要があります。ここでは、「,」で区切られた「'%f←終了位置' % 3.14」と「'%f'」をprint()で出力しています。
#コード07 print('1234567890■出力位置■') print('%f■' % 3.14, '%f') print('%10.5f■' % 3.14, '%10.5f') print('%.5f■' % 3.14, '%.5f') print('%10f■' % 3.14, '%10f') print('%10.f■' % 3.14, '%10.f') print('%.f■' % 3.14, '%.f')
#出力07 1234567890■出力位置■ 3.140000■ %f 3.14000■ %10.5f 3.14000■ %.5f 3.140000■ %10f 3■ %10.f 3■ %.f
(2) %E, %eのサンプルコード
%E, %eのサンプルコードです。%fと同様の出力書式となります。
#コード08 print('123456789012345■出力位置■') print('%E■' % 3.14, '%E') print('%e■' % 3.14, '%e') print('%15.3e■' % 3.14, '%15.3e') print('%.3e■' % 3.14, '%.3e') print('%15e■' % 3.14, '%15e') print('%15.e■' % 3.14, '%15.e') print('%.e■' % 3.14, '%.e')
#出力08 123456789012345■出力位置■ 3.140000E+00■ %E 3.140000e+00■ %e 3.140e+00■ %15.3e 3.140e+00■ %.3e 3.140000e+00■ %15e 3e+00■ %15.e 3e+00■ %.e
4.広告
「ホームページよかったよ!」っていうあなた。以下の広告から、なにか買い物をしてください。一部が私の報酬になり、モチベーションが大幅upします。