しぷぜん

しぷぜん

素人プログラマなおいがStep Zero to Oneしていくブログ

Pythonでよく忘れる文字と数字の変換に関するあれこれ(prinf形式)

こんにちは、なおいです。

Pythonを触っていると文字列の出力(ファイル出力を含む)でよくフォーマットが問題で出力できないとかで悩んで、検索しているので備忘録シリーズその3書きます。

 

 

printf形式の文字列書式

これもprint内の書式の変更やファイル出力時のフォーマット指定(fmt=**)の際に用いられているように感じます。この形式はCを踏襲しているみたいなのですが私はこの書き方にいつも困らされています。

基本ルール(原文日本語訳まま)

以下のルールに従い、かつ以下の出てくる順に指定することで書式化が行われます。

1.指定子の開始を示す文字 '%' 。
2.マップキー (オプション)。丸括弧で囲った文字列からなります (例えば (somename)) 。
3.変換フラグ (オプション)。一部の変換型の結果に影響します。
4.最小のフィールド幅 (オプション)。 '*' (アスタリスク) を指定した場合、
 実際の文字列幅が valuesタプルの次の要素から読み出されます。
 タプルには最小フィールド幅やオプションの精度指定の後に
 変換したいオブジェクトがくるようにします。
5.精度 (オプション)。 '.' (ドット) とその後に続く精度で与えられます。
 '*' (アスタリスク) を指定した場合、精度の桁数はvaluesタプルの
 次の要素から読み出されます。タプルには精度指定の後に変換したい値がくるようにします。
6.精度長変換子 (オプション)。
7.変換型。

 

分からないので解読していく

私はこれ読んでも全然わかりません。唯一分かったのは最初に%が必要っていうことぐらい。一緒に例があったのでそれをヒントに解読していきます。

print('%(lang)s has %(num)03d quote types.' %{"lang": "Python", "num": 2})

→Python has 002 quote types.

1.%を付けることでそこに何か変数(定数)を入力できる。なお、その変数は後ろに%を付けて呼び出す。

2.変数が複数あるような場合、呼び出すモノの名前を()で書けば指定できる。

図解)

   f:id:ct-innovation01:20170911110904p:plain

%が複数あって中にlangって名札がついたモノを置いておくからそれを持ってきてね。langの名札がついている文字はPythonだよ!ということで、「Python」という文字が返ってきている。

3.は型変換のフラグ例えばdと書けば、10進数とかsと書けば文字列が返ってくる。以下に頻出のものを並べておきます。

変換フラグ 何に変換されるか
%d, %i 符号つき 10 進整数
%o 符号つき 8 進整数
%x, %X 符号つき 16 進整数(大文字・小文字は区別されて表記される)
%e, %E 指数表記の浮動小数点数
%r 文字列(Pythonオブジェクトをrepr()で変換)
%s 文字列(Pythonオブジェクトをstr()で変換)

 4.以降は。。。。僕は使ったことないので一旦置いときます。必要に駆られて使うようになって意味が分かったら追記しますね。

では今回も、最後に使った本と今からでも欲しい本を乗っけて終わります。