Python 3で文字列フォーマッターを使用する方法

前書き

stringクラスのPythonのstr.format()メソッドを使用すると、variableの置換と値の書式設定を行うことができます。 これにより、位置の書式設定により、文字列内で要素をconcatenate一緒に使用できます。

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

フォーマッタを使用する

フォーマッタは、1つ以上のreplacement fieldsまたはプレースホルダー(中括弧{}のペアで定義)を文字列に挿入し、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")

これらは基本的に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()メソッドに渡される値は、順番に文字列に連結されます。

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

"ハッピー" 「笑顔」 "青い" "鮫"

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は、reordering sectionで実行したstr.format()メソッドへの引数のインデックス番号を指定します。 t4)sは、フォーマッタで使用しているデータ型の変換コードを指します。

変換タイプは、Pythonが使用する1文字のタイプコードを指します。 ここで使用するコードは、文字列の場合はs、小数点以下の整数(10ベース)を表示する場合はd、小数点以下の桁数の浮動小数点数を表示するために使用するfです。 。 Format-Specification Mini-Languageの詳細については、Python3の公式ドキュメントをご覧ください。

メソッドに整数が渡されているが、f変換型引数を追加してfloatとして表示したい例を見てみましょう。

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を指定する場合は、ピリオド.の後に、含める小数点以下の桁数を含めることで、その値の精度をさらに指定できます。

サミーがピザの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!

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

小数点以下の桁数のない数値をfloatとして表示しますが、d変換タイプを使用してfloatを整数に変更しようとすると、エラーが発生します。

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!

これはconvert your float to an integerではなく、小数点以下に表示される桁数を制限します。

パディング変数の置換

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

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

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

上記の例では、数値5に文字フィールドサイズ4を指定し、文字列balloonsに文字フィールドサイズ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!

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

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

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

3から12の範囲のii*i、およびi*i*iを出力するPythonの典型的なfor loopを見てみましょう。

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

テキストの配置に<^、および>を追加し、dfに変更して小数点以下の桁数を追加することにより、列の配置を操作することもできます。フィールド名のインデックス番号などを変更して、データが希望どおりに表示されるようにします。

結論

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