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

提供:Dev Guides
移動先:案内検索

###序章

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

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

前提条件

Python 3をインストールし、コンピューターまたはサーバーにプログラミング環境をセットアップする必要があります。 プログラミング環境をセットアップしていない場合は、ローカルプログラミング環境またはサーバー上のプログラミング環境のインストールおよびセットアップガイドを参照して、オペレーティングに適したものにすることができます。システム(Ubuntu、CentOS、Debianなど)

    1. フォーマッタの使用

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

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

情報:このチュートリアルのサンプルコードに従うには、python3コマンドを実行して、ローカルシステムでPythonインタラクティブシェルを開きます。 次に、>>>プロンプトの後に例を追加して、例をコピー、貼り付け、または編集できます。


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()メソッドで渡す値のプレースホルダーとして中括弧を使用できます。

    1. 複数のプレースホルダーでフォーマッターを使用する

フォーマッタを使用する場合は、中括弧の複数のペアを使用できます。 上記の文に別の変数置換を追加する場合は、中括弧の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()メソッドに渡し、文字列と整数のデータ型を混合しました。 これらの各値はコンマで区切られます。

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

パラメータなしで中括弧を空のままにすると、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")

これらは基本的にタプルデータ型であり、タプルに含まれる個々の値は、インデックス番号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.

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

    1. タイプの指定

構文の中括弧内により多くのパラメーターを含めることができます。 フォーマットコード構文{field_name:conversion}を使用します。ここで、field_nameは、並べ替えセクション[で行ったstr.format()メソッドの引数のインデックス番号を指定します。 X177X]、およびconversionは、フォーマッターで使用しているデータ型の変換コードを指します。

変換タイプは、Pythonが使用する1文字のタイプコードを指します。 ここで使用するコードは、文字列の場合はs、10進整数(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}の構文を使用しました。 2番目の中括弧は、最初のパラメーター{field_name}のみを使用します。

上記の例では、小数点以下に表示される数字がたくさんありますが、それらを制限することができます。 float値にfを指定する場合は、ピリオド.の後に、含める小数点以下の桁数を含めることで、その値の精度を追加で指定できます。

サミーがピザの75.765367% oを食べたが、高レベルの精度である必要がない場合は、変換タイプf

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!

これは、フロートを整数変換しませんが、代わりに小数点以下に表示される桁数を制限します。

    1. 可変置換のパディング

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

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

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の変換タイプ。

    1. 変数の使用

これまで、整数、浮動小数点数、および文字列を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!

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

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

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

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

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に変更してください。小数点以下の桁数を追加したり、フィールド名のインデックス番号を変更したりして、データが希望どおりに表示されるようにします。

##結論

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