前書き
文字列は多くの場合、書かれたテキストで構成されているため、句読点、改行、インデントを介して文字列を人間にとって読みやすくするために、文字列の外観をより詳細に制御したい場合があります。
このチュートリアルでは、すべての出力テキストが正しくフォーマットされていることを確認するために、Python文字列を操作する方法のいくつかを検討します。
文字列リテラル
まず、*文字列リテラル*と*文字列値*を区別しましょう。 文字列リテラルは、引用符を含むコンピュータープログラムのソースコードに表示されるものです。 文字列値は、 `+ print()+`関数を呼び出してプログラムを実行したときに表示されるものです。
「Hello、World!」プログラムでは、文字列リテラルは `" Hello、World! "`で、文字列値は引用符なしの `+ Hello、World!+`です。 文字列値は、Pythonプログラムを実行したときにターミナルウィンドウに出力として表示されるものです。
ただし、ソースを引用する場合など、一部の文字列値には引用符を含める必要があります。 文字列リテラルと文字列値は同等ではないため、文字列値が意図したとおりに表示されるように、文字列リテラルに追加の書式設定を追加する必要がしばしばあります。
引用符とアポストロフィ
Pythonでは単一引用符または二重引用符を使用できるため、単一引用符で囲まれた文字列内に二重引用符を使用することで、文字列内に引用符を簡単に埋め込むことができます。
'Sammy says, "Hello!"'
または、二重引用符で囲まれた文字列で所有アポストロフィを使用するには:
"Sammy's balloon is red."
単一引用符と二重引用符を組み合わせる方法では、文字列内の引用符とアポストロフィの表示を制御できます。
複数行
文字列を複数行に印刷すると、テキストが人間にとって読みやすくなります。 複数の行を使用して、文字列をきれいで整然としたテキストにグループ化し、文字としてフォーマットするか、詩や歌の歌詞の改行を維持するために使用できます。
複数行にまたがる文字列を作成するには、文字列を囲むために、三重の単一引用符 `+ '' '`または三重の二重引用符 `" "" + `を使用します。
'''
This string is on
multiple lines
within three single
quotes on either side.
'''
"""
This string is on
multiple lines
within three double
quotes on either side.
"""
三重引用符を使用すると、文字列を複数行に印刷して、テキスト、特に長いテキストを読みやすくすることができます。
エスケープ文字
文字列をフォーマットする別の方法は、*エスケープ文字*を使用することです。 エスケープ文字はすべて、バックスラッシュキー( + \ +
)で始まり、文字列内の別の文字と組み合わせて、特定の方法で特定の文字列をフォーマットします。
一般的なエスケープ文字のリストを次に示します。
Escape character | How it formats |
---|---|
\ |
New line in a multi-line string |
\ |
Backslash |
' |
Apostrophe or single quote |
" |
Double quote |
\n |
Line break |
\t |
Tab (horizontal indentation) |
エスケープ文字を使用して、上記の引用符の例に引用符を追加しますが、今回は二重引用符を使用します。
print("Sammy says, \"Hello!\"")
OutputSammy says, "Hello!"
エスケープ文字 `+ \" + `を使用することにより、二重引用符を使用して、二重引用符で囲まれたテキストを含む文字列を囲むことができます。
同様に、エスケープ文字 `+ \ '+`を使用して、単一引用符で囲まれた文字列にアポストロフィを追加できます。
print('Sammy\'s balloon is red.')
OutputSammy's balloon is red.
エスケープ文字を使用しているため、単一引用符を使用する文字列内にアポストロフィを含めることができます。
上記のように三重引用符を使用すると、文字列を印刷するときに上下にスペースがあることがわかります。 これらのスペースは、プログラム内のテキストを非常に読みやすく保ちながら、文字列の先頭と文字列の末尾で「+ \ +」エスケープキーを使用して削除できます。
"""\
This multi-line string
has no space at the
top or the bottom
when it prints.\
"""
同様に、エスケープ文字「+ \ n 」を使用して、「 enter」または「+ return」キーを押すことなく行を分割できます。
print("This string\nspans multiple\nlines.")
OutputThis string
spans multiple
lines.
エスケープ文字も組み合わせることができます。 複数行の文字列を印刷し、項目別リストのタブ間隔を含めてみましょう。例:
print("1.\tShark\n2.\tShrimp\n10.\tSquid")
Output1. Shark
2. Shrimp
10. Squid
`+ \ t +`エスケープ文字で提供される水平インデントにより、上記の例の2番目の列内での整列が保証され、出力が人間にとって非常に読みやすくなります。
`+ \ n +`エスケープ文字は短い文字列リテラルに対してはうまく機能しますが、ソースコードも人間が読めるようにすることが重要です。 長い文字列の場合、複数行の文字列に対するトリプルクォートのアプローチがしばしば望ましいです。
エスケープ文字は、文字列に追加の書式設定を追加するために使用されますが、これは達成が困難または不可能な場合があります。 エスケープ文字がない場合、文字列「+ Sammyが言う「バルーンの色は赤です。」+ `」をどのように構築しますか?
生ストリング
文字列内で特別な書式設定が必要ない場合はどうなりますか? たとえば、意図的にバックスラッシュを使用するコンピューターコードの文字列を比較または評価する必要がある場合があるため、Pythonでエスケープ文字として使用しないようにします。
-
raw文字列*は、エスケープ文字を含む文字列内のすべてのフォーマットを無視するようPythonに指示します。
文字列の前、開始引用符の直前に `+ r +`を置くことにより、生の文字列を作成します。
print(r"Sammy says,\"The balloon\'s color is red.\"")
OutputSammy says,\"The balloon\'s color is red.\"
与えられた文字列の前に `+ r +`を使用して生の文字列を作成することにより、エスケープ文字として使用されるバックスラッシュやその他の文字を保持できます。
結論
このチュートリアルでは、Python 3で文字列を操作してテキストをフォーマットするいくつかの方法を検討しました。 エスケープ文字や生の文字列などの技術を使用することにより、プログラムの文字列が画面上で正しくレンダリングされ、エンドユーザーがすべての出力テキストを簡単に読むことができるようになります。
次のチュートリアルを参照して、文字列についてさらに学習してください。
-
https://www.digitalocean.com/community/tutorials/an-introduction-to-string-functions-in-python-3 [文字列関数の紹介]
-
https://www.digitalocean.com/community/tutorials/how-to-index-and-slice-strings-in-python-3 [文字列のインデックス付けとスライス方法]
-
https://www.digitalocean.com/community/tutorials/how-to-use-variables-in-python-3 [文字列フォーマッターの使用方法]