Python基礎学習編-3-各種プレースホルダと%方式Format方式でフォーマット出力を行うにはどうすればいいですか?


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ではパーセンテージフォーマットは、整数を自動的にバイナリ表現に変換する方法はありません
    パーセンテージフォーマットの例:
    >>> 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]
  • 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方式のフォーマット例:
  • >>>**           (       )     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%'
    >>> 
    >#           ,      
    >