Python3の文字列について。%記法とformat()記法の対応関係
Python3では '%d'とか'%+5.3lf'のような記法は推奨されず、廃止される。 代わりにformat()を使う必要がある。 このような変更がなされた理由については、 Python 3.0 Hacks第6回 Pythonicな文字列フォーマットforamat()メソッド が分かりやすい。 高尚な理由はどうでもよくて、とりあえず昔の%記法との対応関係表が欲しいが見つからなかった。 仕方ないから、よく使うformatについてC言語のprintf関数との対応表を作った。 極めて愚直な表なので、とにかくこれさえ見れば新旧の違いが理解できる。
結果表示 | C言語 printf(%記法) | python print(format記法) |
---|---|---|
hoge(改行なし) | printf("hoge") | print("hoge", end="") |
hoge(改行あり) | printf("hoge\n") | print("hoge") |
hoge | printf("%s\n", "hoge") | print("{0}".format( "hoge")) |
hoge | printf("%s\n", "hoge") | print("{0:s}".format( "hoge")) |
hoge5piyo | printf("hoge%dpiyo\n", 5) | print("hoge{0}piyo".format( 5)) |
3 a 7 | printf("%d %s %d\n",3,"a",7) | print("{0} {1} {2}".format(3,"a",7)) |
------- | ------- | ------- |
5 | printf("%d\n", 5) | print("{0:d}".format( 5)) |
+5 | printf("%+d\n", 5) | print("{0:+d}".format( 5)) |
+005 | printf("%+04d\n", 5) | print("{0:+04d}".format( 5)) |
------- | ------- | ------- |
12.3456 | printf("%lf\n", 12.3456) | print("{0:f}".format( 12.3456)) |
_12.34 | printf("%6.2lf\n", 12.3456) | print("{0:6.2f}".format( 12.3456)) |
+12.34 | printf("%+6.2lf\n", 12.3456) | print("{0:+6.2f}".format( 12.3456)) |
012.34 | printf("%06.2lf\n", 12.3456) | print("{0:06.2f}".format( 12.3456)) |
------- | ------- | ------- |
_1.23e+01 | printf("%9.2e\n", 12.3456) | print("{0:9.2e}".format( 12.3456)) |
+1.23e+01 | printf("%+9.2e\n", 12.3456) | print("{0:+9.2e}".format( 12.3456)) |
01.23e+01 | printf("%09.2e\n", 12.3456) | print("{0:09.2e}".format( 12.3456)) |
6.2f
は、小数点2桁だけ必ず表示しつつ、6文字分の表示領域に収める場合(ただし999以上なら6文字オーバー)9.2e
は、小数点2桁だけ必ず表示しつつ、指数表記で9文字分の表示領域に収める場合
これぐらい知っとけば、一応なんとかなる。
メモ
その他、C言語にはない新しい表記法については、 format関数による文字列フォーマット(新しい形式) が分かりやすい。
公式の解説は 7.1.3. 書式指定文字列の文法
カーリーブレイス '{' を表示するには Python>str.format()はカールが使えない