目次
- 公式docs紹介
- str.format
- 書式指定文字列
- 動作確認
公式docs紹介
str.format
str.formatの構文
str.format(*args, **kwargs)
- 文字列の書式化操作を行います。このメソッドを呼び出す文字列は通常の文字、または、 {} で区切られた置換フィールドを含みます。
- それぞれの置換フィールドは位置引数のインデックスナンバー、または、キーワード引数の名前を含みます。
- 返り値は、それぞれの置換フィールドが対応する引数の文字列値で置換された文字列のコピーです。
書式指定文字列
書式指定文字列のBNF
replacement_field ::= "{" [field_name] ["!" conversion] [":" format_spec] "}"
field_name ::= arg_name ("." attribute_name | "[" element_index "]")*
arg_name ::= [identifier | digit+]
attribute_name ::= identifier
element_index ::= digit+ | index_string
index_string ::= <any source character except "]"> +
conversion ::= "r" | "s" | "a"
format_spec ::= <described in the next section>
arg_name: ::= 引数のこと。識別子か、数字で指定する
attibute_name: ::= 引数としているオブジェクトの属性のこと。引数の属性を指定できる
element_index: ::= 引数のインデックスのこと。リストやタプルなどのインデックスを指定できる
index_string: ::= 文字列で指定するインデックス?(要確認)
format_spec ::= [[fill]align][sign][#][0][width][grouping_option][.precision][type]
fill ::= <any character>
align ::= "<" | ">" | "=" | "^"
sign ::= "+" | "-" | " "
width ::= digit+
grouping_option ::= "_" | ","
precision ::= digit+
type ::= "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"
説明
replacement_field ::= "{" [field_name] ["!" conversion] [":" format_spec] "}"
field_nameの説明
- arg_name
- attibute_name
- 引数としているオブジェクトの属性のこと。引数の属性を指定できる
- element_index
- 引数のインデックスのこと。リストやタプルなどのインデックスを指定できる
- index_string
field_nameの例
"{0}yen + {1}yen = {2}yen".format(10, 50, 60)
> '10yen + 50yen = 60yen'
"20yen + 30yen = {result}yen".format(result=20+30)
> "20yen + 30yen = 50yen
dir = {"apple": "りんご", "pencil": "えんぴつ"}
"{0[apple]}, {0[pencil]}".format(dir)
> りんご、えんぴつ
conversionの説明
- conversion
- 現在 3つの変換フラグがサポートされています
- str() を呼ぶ '!s'
- repr() を呼ぶ '!r'
- ascii() を呼ぶ '!a'。
conversionの例
"Harold's a clever {0!s}" # Calls str() on the argument first
"Bring out the holy {name!r}" # Calls repr() on the argument first
"More {!a}" # Calls ascii() on the argument first
format_specの説明
- [[fill]align]
- 文字を整列させます。paddingと読んだりしています。
- [sign]
- [width]
- [grouping_option]
- [type]
align
option |
Meaning |
'<' |
利用可能なスペースにおいて、左詰めを強制します (ほとんどのオブジェクトにおいてのデフォルト)。 |
'>' |
利用可能なスペースにおいて、右詰めを強制します (いくつかのオブジェクトにおいてのデフォルト)。 |
'=' |
符号 (があれば) の後ろを埋めます。 '+000000120' のような形で表示されます。このオプションは数値型に対してのみ有効です。フィールド幅の直前が '0' の時はこれがデフォルトになります。 |
'^' |
利用可能なスペースにおいて、中央寄せを強制します。 |
例: : + fill align + width
>>> "{:x>3}".format(2)
'xx2'
>>> "{:9<4}".format(2)
'2999'
>>> "{:9=6}".format(-20)
'-99920'
>>> "{:9>6}".format(-20)
'999-20'
>>> "{:9^6}".format(22)
'992299'
option
option |
Meaning |
'+' |
符号の使用を、正数、負数の両方に対して指定します。 |
'-' |
符号の使用を、負数に対してのみ指定します (デフォルトの挙動です)。 |
空白 |
空白を正数の前に付け、負号を負数の前に使用することを指定します。 |
例: ; + fill align + sign + width
>>> "{:0=-5}".format(-22)
'-0022'
>>> "{:0=-5}".format(22)
'00022'
>>> "{:0=+5}".format(22)
'+0022'
group option
option |
Meaning |
, |
千の位のセパレータにカンマを使います。 |
_ |
浮動小数点数の表現型と整数の表現型 'd' における千倍ごとの区切り文字にアンダースコアを使うというしるしです。 |
: fill + sign + width + group option
>>> "{:x=+12_}".format(1000000000)
'+1_000_000_000'
>>> "{:x=+12,}".format(1000000000)
'+1,000,000,000'
[type]
option |
Meaning |
'b' |
2進数。出力される数値は2を基数とします。 |
'c' |
文字。数値を対応する Unicode 文字に変換します。 |
'd' |
10進数。出力される数値は10を基数とします。 |
'o' |
8進数。出力される数値は8を基数とします。 |
'x' |
16進数。出力される数値は16を基数とします。 10進で9を超える数字には小文字が使われます。 |
'X' |
16進数。出力される数値は16を基数とします。 10進で9を越える数字には大文字が使われます。 |
'n' |
数値。現在のロケールに従い、区切り文字を挿入することを除けば、 'd' と同じです。 |
None |
'd' と同じです。 |
'e' |
科学的記数法。与えられた精度pで、係数を指数から分離する文字「e」で数値を科学的記数法でフォーマットします。 |
'E' |
科学的記数法。'e'区切り文字として大文字の「E」を使用することを除いて、同じです。 |
'f' |
固定小数点表記。与えられた精度pで、数値を小数点以下の桁で10進数としてフォーマットします |
'F' |
固定小数点数表記です。nan が NAN に、inf が INF に変換されることを除き 'f' と同じです |
'g' |
与えられた精度に対して、これは数値を有効数字に丸め、その大きさに応じて、結果を固定小数点形式または科学的記数法のいずれかにフォーマットします。 |
'G' |
汎用フォーマットです。数値が大きくなったとき、 'E' に切り替わることを除き、 'g' と同じです。無限大と NaN の表示も大文字になります。 |
'n' |
数値です。現在のロケールに合わせて、数値分割文字が挿入されることを除き、 'g' と同じです。 |
'%' |
パーセンテージです。数値は 100 倍され、固定小数点数フォーマット ('f') でパーセント記号付きで表示されます。 |
>>> "{:b}".format(7)
'111'
>>> "{:c}".format(7)
'\x07'
>>> "{:d}".format(7)
'7'
>>> "{:0}".format(18)
'18'
>>> "{:o}".format(18)
'22'
>>> "{:x}".format(18)
'12'
>>> "{:X}".format(18)
'12'
>>> "{:X}".format(23)
'17'
>>> "{:X}".format(36)
'24'
>>> "{:X}".format(30)
'1E'
>>> "{:x}".format(30)
'1e'
>>> "{:n}".format(30)
'30'
>>> "{:n}".format(30000)
'30000'
>>> "{:n}".format(30,000)
'30'
>>> "{:}".format(30,000)
'30'
>>> "{:}".format(30.000)
'30.0'
>>> "{:n}".format(30.000)
'30'
>>> "{:e}".format(30.000)
'3.000000e+01'
>>> "{:E}".format(30.000)
'3.000000E+01'
>>> "{:f}".format(30.000)
'30.000000'
>>> "{:f}".format(30.003)
'30.003000'
>>> "{:F}".format(30.003)
'30.003000'
>>> "{:g}".format(30.003)
'30.003'
>>> "{:G}".format(30.003)
'30.003'
>>> "{:%}".format(30.003)
'3000.300000%'
>>> "{:%}".format(10)
'1000.000000%'