Python基礎学習編-3-各種プレースホルダと%方式Format方式でフォーマット出力を行うにはどうすればいいですか?
16520 ワード
pythonを使用してフォーマット出力を行う場合、問題はいくつかの小さな問題に遭遇するので、徹底的にまとめます.
pythonでフォーマット出力を行うには、次の2つの方法があります.
パーセンテージ方式
説明:(本明細書ではPython 3.6環境を用いる) 以下で紹介するFormat()方式は比較的新しい関数であるが,現在のPythonコードの多くは%オペレータを使用しているため,両方を把握しなければならない.Pythonの公式サイトによると、%という古いフォーマットは最終的にこの言語から削除されるので、Format()方式をもっと使うべきだという.
一、パーセンテージ方式
構文の形式:
(ただし、【】内のフィールドはオプション、その他は必須)
% [(name)] [flags] [width] .[precision] typecode(name)オプションで、指定したkey を選択できます. flagsオプションで、次の値を選択できます.
Flags
作用1
作用2
+
右揃え
正数にプラス、負数にマイナスを付ける
-
左揃え
正の数の前に記号がなく、負の数の前に負の記号が付きます.
スペース
右揃え
正数の前にスペース、負数の前にマイナス記号
0
右揃え
正の数の前に記号がなくて、負の数の前に負の番号をプラスして0で空白の所を埋めます
widthオプション、占有幅 .precisionオプション、小数点以下の桁数 typecodeは必須で、置換する値のタイプは次のとおりです.
typecode
さぎょう
s
受信オブジェクトの取得_str__メソッドの戻り値を指定した場所にフォーマットします.
d
整数、浮動小数点数を10進数表示に変換し、指定した位置にフォーマットします.
e
整数、浮動小数点数を科学カウント法に変換し、指定した位置にフォーマットします(小文字e)
E
整数、浮動小数点数を科学カウント法に変換し、指定した位置(大文字E)にフォーマットします.
f
整数、浮動小数点数を浮動小数点数表示に変換し、指定した位置にフォーマットします(デフォルトでは小数点以下6桁保持)
F
同上
o
整数を8進表現に変換し、指定した位置にフォーマットします.
g
自動調整整数、浮動小数点数を浮動小数点型または科学カウント法で表し(6桁を超える場合は科学カウント法)、指定位置にフォーマットします(科学カウントの場合はe;
G
作用は同じですが、科学的なカウントであればEです.
c
整数:数値をunicodeに対応する値に変換し、10進数範囲を0<=i<=1114111文字にし、指定した位置に文字を追加します.
r
受信オブジェクトの取得_repr__メソッドの戻り値を指定した場所にフォーマットします.
%
文字列にフォーマットフラグがある場合は、%%でパーセンテージを表す必要があります.
注:Pythonではパーセンテージフォーマットは、整数を自動的にバイナリ表現に変換する方法はありません
パーセンテージフォーマットの例:
二、Format方式のフォーマット例
構文の形式:
[ [fill] align] [sign] [#] [0] [width] [,] [.precision] [type] fill【オプション】空白に埋め込まれた文字 align【オプション】整列方式(widthに合わせて使用する必要があります)
align
さぎょう
<
内容の左揃え
>
コンテンツの右揃え(デフォルト)
=
内容を右揃えにして、入力文字の左側に記号を配置し、数値タイプにのみ有効にします.すなわち、符号+フィラー+数字
^
コンテンツの中心
sign【オプション】符号の有無
align
さぎょう
+
プラスにプラス、マイナスにマイナス
-
正の符号は変わらず,負の符号は負になる
スペース
プラス、マイナス
#【オプション】バイナリ、8進数、16進数については、#を加えると0 b/0 o/0 x、そうでないと は表示されません.、【オプション】数値に区切り記号を追加します.たとえば、1000000 width【オプション】フォーマットビットの幅 .precision【オプション】小数位保持精度 type【オプション】フォーマットタイプ
typecode
さぎょう
文字列タイプのパラメータが入力された場合:
s
文字列タイプデータのフォーマット
空白
タイプが指定されていない場合、デフォルトはNone、同sです.
整数タイプのパラメータを渡す場合:
b
10進数の整数を自動的に2進数表示に変換してフォーマット
c
10進数整数を対応するunicode文字に自動的に変換
d
じっしんせいすう
o
10進数整数を8進数表示に自動変換してフォーマット
x
10進数整数を16進数表示に自動的に変換してフォーマット(小文字x)
X
10進数整数を16進数表示に自動変換してフォーマット(大文字X)
浮動小数点または小数点以下のパラメータを入力します.
e
科学カウント法(小文字e)表示に変換し、フォーマットします.
E
科学カウント法(大文字E)表示に変換し、フォーマットします.
f
浮動小数点(既定の小数点以下6桁)表示に変換し、フォーマットします.
F
浮動小数点(既定の小数点以下6桁)表示に変換し、フォーマットします.
g
自動eとfで切り替え
G
EとFの自動切り替え
%
パーセンテージの表示(小数点以下6桁)
Format方式のフォーマット例:
pythonでフォーマット出力を行うには、次の2つの方法があります.
パーセンテージ方式
説明:
一、パーセンテージ方式
構文の形式:
(ただし、【】内のフィールドはオプション、その他は必須)
% [(name)] [flags] [width] .[precision] typecode
Flags
作用1
作用2
+
右揃え
正数にプラス、負数にマイナスを付ける
-
左揃え
正の数の前に記号がなく、負の数の前に負の記号が付きます.
スペース
右揃え
正数の前にスペース、負数の前にマイナス記号
0
右揃え
正の数の前に記号がなくて、負の数の前に負の番号をプラスして0で空白の所を埋めます
typecode
さぎょう
s
受信オブジェクトの取得_str__メソッドの戻り値を指定した場所にフォーマットします.
d
整数、浮動小数点数を10進数表示に変換し、指定した位置にフォーマットします.
e
整数、浮動小数点数を科学カウント法に変換し、指定した位置にフォーマットします(小文字e)
E
整数、浮動小数点数を科学カウント法に変換し、指定した位置(大文字E)にフォーマットします.
f
整数、浮動小数点数を浮動小数点数表示に変換し、指定した位置にフォーマットします(デフォルトでは小数点以下6桁保持)
F
同上
o
整数を8進表現に変換し、指定した位置にフォーマットします.
g
自動調整整数、浮動小数点数を浮動小数点型または科学カウント法で表し(6桁を超える場合は科学カウント法)、指定位置にフォーマットします(科学カウントの場合はe;
G
作用は同じですが、科学的なカウントであればEです.
c
整数:数値をunicodeに対応する値に変換し、10進数範囲を0<=i<=1114111文字にし、指定した位置に文字を追加します.
r
受信オブジェクトの取得_repr__メソッドの戻り値を指定した場所にフォーマットします.
%
文字列にフォーマットフラグがある場合は、%%でパーセンテージを表す必要があります.
注:Pythonではパーセンテージフォーマットは、整数を自動的にバイナリ表現に変換する方法はありません
パーセンテージフォーマットの例:
>>> print("a = a%+d" %2)
a = a+2
>>> print("a = a%+d" %-2)
a = a-2
>>>
>>>> print("a = a%-d" %2)
a = a2
>>> print("a = a%-d" %-2)
a = a-2
>>>
>>> print("a = a% d" %2)
a = a 2
>>> print("a = a% d" %-2)
a = a-2
>>>
>>> print("a = a%0d" %2)
a = a2
>>> print("a = a%0d" %-2)
a = a-2
>>>
>>>
>>> print("i am %s" %"angle")
i am angle
>>> print("i am %s age %d" %("angle",18))
i am angle age 18
>>> print("i am %(name)s age %(age)d" %{"name":"angle", "age":18})
i am angle age 18
>>>
>>>
>>> print("percent is %.2f"%99.99999)
percent is 100.00
>>> print("percent is %.2f"%99.123999)
percent is 99.12
>>> print("percent is %(aa).2f"%{"aa": 99.15,})
percent is 99.15
>>> print("percent is %(aa).2f %%"%{"aa": 99.17234,})
percent is 99.17 %
>>>
>>>
二、Format方式のフォーマット例
, 、
構文の形式:
[ [fill] align] [sign] [#] [0] [width] [,] [.precision] [type]
align
さぎょう
<
内容の左揃え
>
コンテンツの右揃え(デフォルト)
=
内容を右揃えにして、入力文字の左側に記号を配置し、数値タイプにのみ有効にします.すなわち、符号+フィラー+数字
^
コンテンツの中心
align
さぎょう
+
プラスにプラス、マイナスにマイナス
-
正の符号は変わらず,負の符号は負になる
スペース
プラス、マイナス
typecode
さぎょう
文字列タイプのパラメータが入力された場合:
s
文字列タイプデータのフォーマット
空白
タイプが指定されていない場合、デフォルトはNone、同sです.
整数タイプのパラメータを渡す場合:
b
10進数の整数を自動的に2進数表示に変換してフォーマット
c
10進数整数を対応するunicode文字に自動的に変換
d
じっしんせいすう
o
10進数整数を8進数表示に自動変換してフォーマット
x
10進数整数を16進数表示に自動的に変換してフォーマット(小文字x)
X
10進数整数を16進数表示に自動変換してフォーマット(大文字X)
浮動小数点または小数点以下のパラメータを入力します.
e
科学カウント法(小文字e)表示に変換し、フォーマットします.
E
科学カウント法(大文字E)表示に変換し、フォーマットします.
f
浮動小数点(既定の小数点以下6桁)表示に変換し、フォーマットします.
F
浮動小数点(既定の小数点以下6桁)表示に変換し、フォーマットします.
g
自動eとfで切り替え
G
EとFの自動切り替え
%
パーセンテージの表示(小数点以下6桁)
Format方式のフォーマット例:
>>>** ( ) format() **
>>> print("i am {}, age {}, {}".format("yolanda", 18, 'hello'))
i am yolanda, age 18, hello
>
>>> print("i am {}, age {}, {}".format(*["yolanda", 18, 'hello']))
i am yolanda, age 18, hello
>
>>> print("i am {}, age {}, {}".format(*["yolanda", 18]))
Traceback (most recent call last):
File "" , line 1, in
IndexError: tuple index out of range
>>>** format() **
>>> print("i am {0}, age {1}, name {0}".format(*["yolanda", 18]))
i am yolanda, age 18, name yolanda
>
>>> print("i am {0}, age {1}, name {0}".format("yolanda", 18))
i am yolanda, age 18, name yolanda
>
>>> print("i am {0}, age {1}, name {0}".format(["yolanda", 18]))
Traceback (most recent call last):
File "" , line 1, in
IndexError: tuple index out of range
>>>
>>>** format() , **
>>> print("i am {name}, age {age}, name {name}".format(name="yolanda", age=18))
i am yolanda, age 18, name yolanda
>
>>> print("i am {name}, age {age}, name {name}".format(*{"name": "yolanda", "age":18}))
Traceback (most recent call last):
File "" , line 1, in
KeyError: 'name'
>>> print("i am {name}, age {age}, name {name}".format(**{"name": "yolanda", "age":18}))
i am yolanda, age 18, name yolanda
>>>
>>> print("i am {0[0]}, age {0[1]}, name {0[2]}; you are {1[0]}, age {1[1]}, name {1[2]}".format([1,2,3], [11,22,33]))
i am 1, age 2, name 3; you are 11, age 22, name 33
>>>
>>>
>>> print("i am {:s}, age {:d}, money {:f}".format("yolanda", 18, 9999999.999))
i am yolanda, age 18, money 9999999.999000
>
>>> print("i am {:s}, age {:d}, money {:f}".format(*["yolanda", 18, 9999999.999]))
i am yolanda, age 18, money 9999999.999000
>
>>> print("i am {name:s}, age {age:d}".format(name="yolanda", age=18))
i am yolanda, age 18
>
>>> print("i am {name:s}, age {age:d}".format({"name":"yolanda", age:18}))
Traceback (most recent call last):
File "" , line 1, in
NameError: name 'age' is not defined
>
>>> print("i am {name:s}, age {age:d}".format({"name":"yolanda", "age":18}))
Traceback (most recent call last):
File "" , line 1, in
KeyError: 'name'
>
>>> print("i am {name:s}, age {age:d}".format(**{"name":"yolanda", "age":18}))
i am yolanda, age 18
>>>
>>>
>>> print("number: {:b},{:o},{:d},{:x},{:X},{:%}".format(10,10,10,10,10,18.8888,2))
number: 1010,12,10,a,A,1888.880000%
>>>
>>>
>>> print("number: {0:b},{0:o},{0:d},{0:x},{0:X},{0:%}".format(10,10,10,10,10,18.8888,2))
number: 1010,12,10,a,A,1000.000000%
>>> print("number: {0:b},{0:o},{0:d},{0:x},{0:X},{0:%}".format(8))
number: 1000,10,8,8,8,800.000000%
>>>
>>> print("number: {num:b},{num:o},{num:d},{num:x},{num:X},{num:%}".format(num=6))
number: 110,6,6,6,6,600.000000%
>>>
>>> print ("Name:%10s Age:%8d Height:%8.2f"%("yolanda",25,1.83))
Name: yolanda Age: 25 Height: 1.83
>>>
>>> print ("Name:%-10s Age:%-8d Height:%-8.2f"%("yolanda",25,1.83))
Name:yolanda Age:25 Height:1.83
>>>
>>> print ("Name:%-10s Age:%08d Height:%08.2f"%("yolanda",25,1.83))
Name:yolanda Age:00000025 Height:00001.83
>>>
># format
>>> format(0.0015,'.2e')
'1.50e-03'
>>>
>>> a = 0.035
>>> b = format(a, '.2%')
>>> b
'3.50%'
>>>
># ,
>