Python3で文字列フォーマッタを使用する方法
###序章
Pythonの str.format()
string クラスのメソッドを使用すると、変数の置換と値のフォーマットを行うことができます。 これにより、位置の書式設定により、文字列内で要素を連結することができます。
このチュートリアルでは、Pythonでのフォーマッターの一般的な使用法について説明します。これにより、コードとプログラムをより読みやすく、ユーザーフレンドリーにすることができます。
前提条件
Python 3をインストールし、コンピューターまたはサーバーにプログラミング環境をセットアップする必要があります。 プログラミング環境をセットアップしていない場合は、ローカルプログラミング環境またはサーバー上のプログラミング環境のインストールおよびセットアップガイドを参照して、オペレーティングに適したものにすることができます。システム(Ubuntu、CentOS、Debianなど)
##フォーマッタの使用
フォーマッターは、1つ以上の置換フィールドまたはプレースホルダーを入力することで機能します—中括弧のペアで定義されます {}
—文字列に変換し、 str.format()
方法。 文字列と連結する値をメソッドに渡します。 この値は、プログラムの実行時にプレースホルダーが配置されるのと同じ場所に渡されます。
フォーマッタを使用する文字列を出力してみましょう。
情報:このチュートリアルのサンプルコードに従うには、ローカルシステムでPythonインタラクティブシェルを開いて、 python3
指図。 次に、例の後に追加して、例をコピー、貼り付け、または編集できます。 >>>
促す。
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")
これらは基本的にタプルデータ型であり、タプルに含まれる個々の値は、インデックス番号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
引数のインデックス番号を指定します str.format()
並べ替えセクションで行った方法、および conversion
フォーマッタで使用しているデータ型の変換コードを指します。
変換タイプは、Pythonが使用する1文字のタイプコードを指します。 ここで使用するコードは次のとおりです。 s
文字列の場合、 d
10進整数(10基数)を表示するには、および f
これを使用して、小数点以下の桁数で浮動小数点数を表示します。 Format-Specification Mini-Language の詳細については、Python3の公式ドキュメントを参照してください。
メソッドに整数が渡された例を見てみましょう。ただし、整数を追加して浮動小数点数として表示したいとします。 f
変換タイプの引数:
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}
.
上記の例では、小数点以下に表示される数字がたくさんありますが、それらを制限することができます。 指定する場合 f
浮動小数点値の場合、終止符を含めることにより、その値の精度を追加で指定できます .
含めたい小数点以下の桁数が続きます。
サミーがピザの75.765367% oを食べたが、高レベルの精度である必要がない場合は、小数点以下の桁数を3に制限できます。 .3
変換タイプの前 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として表示しますが、floatを整数に変更しようとすると 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!
これは、フロートを整数に変換しませんが、代わりに小数点以下に表示される桁数を制限します。
##可変置換のパディング
プレースホルダーは置換フィールドであるため、パッドを使用するか、追加のパラメーターを使用してフィールドサイズを大きくすることで要素の周囲にスペースを作成できます。 これは、大量のデータを視覚的に整理する必要がある場合に役立ちます。
コロンの後にフィールドサイズ(文字数)を示す数値を追加できます :
構文の中括弧内:
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********
渡される文字列を受け入れています str.format()
コロンを含めて他に指定しなかったため、インデックス位置0にあり、使用することを指定します *
フィールドを埋めるためのスペースの代わりに。 文字列を中央に配置します ^
、フィールドのサイズが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!
変数は、フォーマッター構文構造の各部分を簡単に置き換えることができます。 これにより、ユーザーが生成した入力を取り込んでそれらの値を変数に割り当てるときに、作業が簡単になります。
##フォーマッタを使用してデータを整理する
フォーマッターは、多くのデータを視覚的に整理するために使用されているときに、最もよく見えます。 データベースをユーザーに表示している場合、フォーマッターを使用してフィールドサイズを大きくし、配置を変更すると、出力が読みやすくなります。
出力されるPythonの典型的なforループを見てみましょう i
, i*i
、 と i*i*i
3から12の範囲:
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
小数点以下の桁数を追加したり、フィールド名のインデックス番号を変更したりして、データが希望どおりに表示されるようにします。
##結論
変数の置換にフォーマッターを使用すると、文字列を連結し、値とデータを整理するための効果的な方法になります。 フォーマッターは、変数の置換を文字列に渡すための基本的ですが説明的ではない方法を表し、出力が読みやすくユーザーフレンドリーであることを確認するのに役立ちます。