余白の書きなぐり

aueweのブログ

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文字分の表示領域に収める場合

これぐらい知っとけば、一応なんとかなる。


メモ