前書き

stringクラスのPythonの `+ str.format()+`メソッドを使用すると、https://を実行できます。 www.digitalocean.com/community/tutorials/how-to-use-variables-in-python-3 [変数]置換および値のフォーマット。 これにより、位置の書式設定により、文字列内でhttps://www.digitalocean.com/community/tutorials/an-introduction-to-working-with-strings-in-python-3#string-concatenation[concatenate]要素を一緒に使用できます。

このチュートリアルでは、Pythonでのフォーマッタの一般的な使用法をいくつか紹介します。これにより、コードとプログラムが読みやすくなり、ユーザーフレンドリーになります。

フォーマッタを使用する

フォーマッタは、1つ以上の* replacementフィールド*またはプレースホルダ(一対の中括弧 `+ {} `で定義)を文字列に入れ、 ` str.format()+`メソッドを呼び出すことで機能します。 文字列と連結する値をメソッドに渡します。 この値は、プログラムの実行時にプレースホルダーが配置されているのと同じ場所に渡されます。

フォーマッタを使用する文字列を印刷してみましょう。

print("Sammy has {} balloons.".format(5))
OutputSammy has 5 balloons.

上記の例では、プレースホルダーとして中括弧のペアを使用して文字列を作成しました。

"Sammy has {} balloons."

次に、 `+ str.format()`メソッドを追加し、整数の値 ` 5 `をそのメソッドに渡しました。 これは、中括弧があった文字列に ` 5 +`の値を置きます:

Sammy has 5 balloons.

フォーマッタープレースホルダーを持つ文字列の値と等しくなるように変数を割り当てることもできます。

open_string = "Sammy loves {}."
print(open_string.format("open source"))
OutputSammy loves open source.

この2番目の例では、文字列 `” open source “`を大きな文字列と連結し、元の文字列の中括弧を置き換えました。

Pythonのフォーマッターでは、 `+ str.format()+`メソッドで渡す値のプレースホルダーとして中括弧を使用できます。

複数のプレースホルダーを持つフォーマッターの使用

フォーマッタを使用する場合、中括弧の複数のペアを使用できます。 上記の文に別の変数置換を追加したい場合は、中括弧の2番目のペアを追加し、メソッドに2番目の値を渡します。

new_open_string = "Sammy loves {} {}."                      #2 {} placeholders
print(new_open_string.format("open-source", "software"))    #Pass 2 strings into method, separated by a comma
OutputSammy loves open-source software.

別の置換を追加するために、中括弧の2番目のペアを元の文字列に追加しました。 次に、2つの文字列を `+ str.format()+`メソッドに渡し、それらをコンマで区切ります。

同じ構文に従って、追加の置換を追加できます。

sammy_string = "Sammy loves {} {}, and has {} {}."                      #4 {} placeholders
print(sammy_string.format("open-source", "software", 5, "balloons"))    #Pass 4 strings into method
OutputSammy loves open-source software, and has 5 balloons.

`+ sammy_string `では、変数置換のプレースホルダーとして中括弧の4つのペアを追加しました。 次に、4つの値を ` str.format()+`メソッドに渡し、文字列と整数のデータ型を混合しました。 これらの各値はコンマで区切られます。

位置引数とキーワード引数を使用したフォーマッタの並べ替え

パラメータなしで中括弧を空のままにすると、Pythonは `+ str.format()+`メソッドを介して渡された値を順番に置き換えます。 これまで見てきたように、2つの値が渡される2つの空の中括弧を持つフォーマッター構造は、次のようになります。

print("Sammy the {} has a pet {}!".format("shark", "pilot fish"))
OutputSammy the shark has a pet pilot fish!

中括弧の最初のペアは、文字列値「+ “shark” + `で置き換えられ、2番目のペアは、文字列値「” pilot fish “`で置き換えられます。

メソッド内に存在する値は次のようになります。

("shark", "pilot fish")

これらは基本的にhttps://www.digitalocean.com/community/tutorials/understanding-tuples-in-python-3[tuple data type]であり、タプルに含まれる個々の値はインデックス番号で呼び出すことができます。インデックス番号0

これらのインデックス番号を、元の文字列のプレースホルダーとして機能する中括弧に渡すことができます。

print("Sammy the {0} has a pet {1}!".format("shark", "pilot fish"))

上記の例では、出力は、タプル内の値を順番に呼び出しているため、インデックス番号を中括弧に渡さずに取得したものになります。

OutputSammy the shark has a pet pilot fish!

ただし、プレースホルダーのパラメーターを使用してインデックス番号を逆にすると、文字列に渡される値を逆にすることができます。

print("Sammy the {1} has a pet {0}!".format("shark", "pilot fish"))
OutputSammy the pilot fish has a pet shark!

インデックス位置0および1に値を持つタプルで2のインデックス番号を呼び出す場合、範囲外の値を呼び出しています。 範囲外のインデックス番号を呼び出すと、エラーメッセージが表示されます。

print("Sammy the {2} has a pet {1}!".format("shark", "pilot fish"))
OutputIndexError: tuple index out of range

表示されるエラーメッセージは、インデックス番号0と1の値のみを持つタプルを指しているため、インデックス番号2を範囲外にしています。

さらにいくつかのプレースホルダーといくつかの値を追加して、それらに渡すことで、フォーマッターをより適切に並べ替える方法を理解できるようにします。 最初に、4つのプレースホルダーを持つ新しい文字列を示します。

print("Sammy is a {}, {}, and {} {}!".format("happy", "smiling", "blue", "shark"))
OutputSammy is a happy, smiling and blue shark!

パラメータなしでは、 `+ str.format()+`メソッドに渡される値は文字列に順番に連結されます。

タプルに含まれる文字列値は、次のインデックス番号に対応します。

“happy” “smiling” “blue” “shark”

0

1

2

3

値のインデックス番号を使用して、文字列に表示される順序を変更しましょう。

print("Sammy is a {3}, {2}, and {1} {0}!".format("happy", "smiling", "blue", "shark"))
OutputSammy is a shark, blue, and smiling happy!

インデックス番号3から始めたので、最初に `” shark “`の最後の値を呼び出しました。 パラメータとして含まれる他のインデックス番号は、元の文字列内での単語の表示順​​序を変更します。

位置引数に加えて、キーワード名で呼び出されるキーワード引数を導入することもできます。

print("Sammy the {0} {1} a {pr}.".format("shark", "made", pr = "pull request"))
OutputSammy the shark made a pull request.

この例は、位置引数とともに使用されるキーワード引数の使用を示しています。 キーワード引数 `+ pr +`を位置引数と一緒に入力し、これらの引数を移動して結果の文字列を変更できます。

print("Sammy the {pr} {1} a {0}.".format("shark", "made", pr = "pull request"))
OutputSammy the pull request made a shark.

文字列フォーマッタで使用される位置引数とキーワード引数により、並べ替えによる元の文字列の操作をより詳細に制御できます。

タイプを指定する

構文の中括弧内により多くのパラメーターを含めることができます。 フォーマットコード構文 `+ {field_name:conversion} `を使用します。ここで、 ` field_name `は、httpsで行った ` str.format()`メソッドへの引数のインデックス番号を指定します。 //www.digitalocean.com/community/tutorials/how-to-use-string-formatters-in-python-3#reordering-formatters-with-positional-and-keyword-arguments[reordering section]、および ` conversion + `は、フォーマッタで使用しているデータ型の変換コードを指します。

変換タイプは、Pythonが使用する1文字のタイプコードを指します。 ここで使用するコードは、文字列に「+ s 」、10進整数(10進数)を表示する「 d 」、および小数点以下の桁数を表示する「 f +」です。 Python 3の公式ドキュメントからhttps://docs.python.org/3.6/library/string.html#format-specification-mini-language[Format-Specification Mini-Language]の詳細を読むことができます。

メソッドに整数が渡された例を見てみましょう。ただし、 `+ f +`変換タイプ引数を追加して、整数を浮動小数点数として表示したい場合があります。

print("Sammy ate {0:f} percent of a {1}!".format(75, "pizza"))
OutputSammy ate 75.000000 percent of a pizza!

最初の波括弧置換フィールドに `+ {field_name:conversion} `の構文を使用して、floatを出力しました。 2番目の中括弧は、最初のパラメーター ` {field_name} +`のみを使用します。

上記の例では、小数点の後に多くの数字が表示されていますが、それらを制限できます。 float値に `+ f `を指定する場合、追加したい小数点以下の桁数が続くフルストップ `。+`を含めることで、その値の精度をさらに指定できます。

Sammyがピザの75.765367%を食べたが、高いレベルの精度を必要としない場合、変換タイプ「+ f 」の前に「.3+」を追加することで、小数点以下3桁を制限できます。

print("Sammy ate {0:.3f} percent of a pizza!".format(75.765367))
OutputSammy ate 75.765 percent of a pizza!

小数点以下1桁が必要な場合は、次のように文字列とメソッドを書き換えることができます。

print("Sammy ate {0:.1f} percent of a pizza!".format(75.765367))
OutputSammy ate 75.8 percent of a pizza!

精度を変更すると、数値が丸められることに注意してください。

小数点なしの数値を浮動小数点数として表示しますが、「+ d +」変換タイプを使用して浮動小数点数を整数に変更しようとすると、エラーが表示されます。

print("Sammy ate {0:d} percent of a pizza!".format(75.765367))
OutputValueError: Unknown format code 'd' for object of type 'float'

小数点以下の桁数を表示したくない場合は、次のようにフォーマッターを記述できます。

print("Sammy ate {0:.0f} percent of a pizza!".format(75.765367))
OutputSammy ate 76 percent of a pizza!

これはhttps://www.digitalocean.com/community/tutorials/how-to-convert-data-types-in-python-3#converting-number-types[floatを整数に変換]ではなく、代わりに制限します小数点の後に表示される場所の数。

パディング変数の置換

プレースホルダーは置換フィールドであるため、追加のパラメーターを使用してフィールドサイズを大きくすることにより、要素の周りに*パッド*またはスペースを作成できます。 これは、大量のデータを視覚的に整理する必要がある場合に役立ちます。

構文の中括弧内のコロン `:`の後に、フィールドサイズ(文字数)を示す数値を追加できます。

print("Sammy has {0:4} red {1:16}!".format(5, "balloons"))
OutputSammy has    5 red balloons        !

上記の例では、数値が「5」で文字フィールドサイズが4で、文字列が「+ balloons on」で文字フィールドサイズが16です(長い文字列であるため)。

ご覧のとおり、デフォルトでは、文字列はフィールド内で左寄せされ、数字は右寄せされます。 これは、コロンの直後に配置コードを配置することで変更できます。 `+ <`はテキストをフィールド内で左揃えにし、 ` ^ `はテキストをフィールド内で中央揃えにし、 `> +`はテキストを右揃えにします。

数字を左揃えにして文字列を中央揃えにしましょう。

print("Sammy has {0:<4} red {1:^16}!".format(5, "balloons"))
OutputSammy has 5    red     balloons    !

これで、「+ 5+」が左揃えになり、フィールドに「+ red 」の前にスペースができ、「 balloons +」がそのフィールドの左右にスペースを置いて中央に配置されることがわかります。

デフォルトでは、フォーマッタでフィールドを大きくすると、Pythonはフィールドを空白文字で埋めます。 コロンの直後に配置する文字を指定することで、これを別の文字に変更できます。

print("{:*^20s}".format("Sammy"))
Output*******Sammy********

インデックス位置0で `+ str.format()`に渡される文字列を受け入れます。これは、コロンを含め、特に指定しなかったため、スペースの代わりに ` * `を使用するように指定するためです。フィールドアップ。 文字列を「 ^ 」で中央揃えし、フィールドのサイズが20文字であることを指定し、「 s +」を含めることで文字列変換タイプを使用していることも示します。

これらのパラメーターを以前に使用した他のパラメーターと組み合わせることができます。

print("Sammy ate {0:5.0f} percent of a pizza!".format(75.765367))
OutputSammy ate    76 percent of a pizza!

中括弧内のパラメーターで、フロートのインデックスフィールド番号を指定し、コロンを含め、フィールド番号のサイズを示し、ストップを含め、小数点以下の桁数で書き込み、次に指定しました`+ f +`の変換タイプ。

変数を使用する

これまで、整数、浮動小数点数、および文字列を `+ str.format()+`メソッドに渡しましたが、メソッドを介して変数を渡すこともできます。 これは他の変数と同じように機能します。

nBalloons = 8
print("Sammy has {} balloons today!".format(nBalloons))
OutputSammy has 8 balloons today!

元の文字列とメソッドに渡されるものの両方に変数を使用できます:

sammy = "Sammy has {} balloons today!"
nBalloons = 8
print(sammy.format(nBalloons))
OutputSammy has 8 balloons today!

フォーマッタ構文構築の各部分を変数で簡単に置き換えることができます。 これにより、ユーザーが生成した入力を取得し、それらの値を変数に割り当てるときに、作業が簡単になります。

フォーマッタを使用してデータを整理する

フォーマッターは、視覚的な方法で多くのデータを整理するために使用されているときに、最適な観点から見ることができます。 データベースをユーザーに表示する場合、フォーマッタを使用してフィールドサイズを増やし、配置を変更すると、出力が読みやすくなります。

「+ i +」、「 + i * i + 、および3〜12の範囲の + i * i * i + `:

for i in range(3,13):
   print(i, i*i, i*i*i)
Output3 9 27
4 16 64
5 25 125
6 36 216
7 49 343
8 64 512
9 81 729
10 100 1000
11 121 1331
12 144 1728

出力は何らかの方法で編成されますが、数値は互いの列にあふれ、出力の下部が読みにくくなります。 多数の大小のデータセットで作業している場合、これは問題を引き起こす可能性があります。

フォーマッターを使用して、これらの数値にさらにスペースを与えましょう。

for i in range(3,13):
   print("{:3d} {:4d} {:5d}".format(i, i*i, i*i*i))

ここでは、中括弧で、インデックス番号のフィールド名を追加せず、コロンで始まり、その後にフィールドサイズの番号、および整数を使用しているため「+ d +」変換タイプを追加しました。 この例では、予想される各出力のサイズに対応し、可能な最大サイズに応じて、それぞれに2つの余分な文字スペースを与えたため、出力は次のようになります。

Output  3    9    27
 4   16    64
 5   25   125
 6   36   216
 7   49   343
 8   64   512
 9   81   729
10  100  1000
11  121  1331
12  144  1728

カラムが偶数になるように一貫したフィールドサイズの数値を指定して、より大きな数値に対応できるようにします。

for i in range(3,13):
   print("{:6d} {:6d} {:6d}".format(i, i*i, i*i*i))
Output     3      9     27
    4     16     64
    5     25    125
    6     36    216
    7     49    343
    8     64    512
    9     81    729
   10    100   1000
   11    121   1331
   12    144   1728

また、テキストの配置に「+ <」、「 ^ 」、「> 」を追加し、「 d 」を「 f +」に変更して小数点以下の桁を追加し、フィールドを変更して、列の配置を操作することもできますインデックス番号に名前を付け、必要に応じてデータを表示するようにします。

結論

変数の置換にフォーマッターを使用すると、文字列を連結し、値とデータを整理するための効果的な方法になります。 フォーマッタは、変数の置換を文字列に渡すための単純ではあるが説明のない方法を表し、出力が読みやすく、使いやすいことを確認するのに役立ちます。