Python

【Python】文字列の扱い方をまとめてみる

2019/08/15

Python学習第4弾。
今回は文字列についてまとめておきたいと思います。

Pythonの文字列

1. 文字列の基本的な作り方

1-1. print関数でそのまま表示

Pythonで文字列を作るには、文字列をシングルクォーテーション(')か、ダブルクォーテーション(")で囲みます。
具体的には以下のように記述します。

↑ str_01.pyとして保存して実行してみます

↑ pythonの実行例

nodoame.net
nodoame.net
日本語もOK
I am a Cat.
45

↑ 実行結果

↑ 実際に実行した結果のキャプチャ

1-2. シングルクォーテーションを重ねるとエラー

シングルクォート、ダブルクォートはどちらでも文字列は作ることができますが、シングルクォートの場合は文字列中にシングルクォートを使用することで、エラーが発生します。
PHPでもよくあるやつですね。

↑ このように、シングルクォート中でシングルクォートを使うと。。。

↑ エラーが起きます

↑ 見事にエラー

解決方法。
こういうときは潔くダブルクォーテーションを使うか、エスケープ文字のバックスラッシュ(キーボードの右上の方にある¥マーク)を使ます。

I'm a Cat.
I'm a Cat.

↑ エラーは起きません

1-3. 変数に文字列を代入する

↑ str_04.py

文字列文字列文字列
This is a pen.

1-4. 三重引用符

複数行に渡って文字列を記述したい場合は、クォート文字を3つ続ける「三重引用符」を使って書く方法があります。
PHPでいうところの、ヒアドキュメントのような扱いなのでしょうか?

↑ str_05.py

広島、阪神、巨人が改行されて表示されましたが、広島の上、巨人の下が改行されて「空行」が入っています。
これを防ぐために、Pythonでは、三重引用符の直後にバックスラッシュ(キーボードの右上の方にある¥マーク)を書いて、改行しないようにするという手法がよくとられるとのことです。

↑ str_06.py

↑ 空行がなくなりました

2. 文字列の連結

2-1. 「+」で単純に連結する

文字列の連結は 『+』 を使います。Javascriptと同じような感覚です。

↑ str_02_1.py

↑ str_02_1.pyの結果

↑ 結果のキャプチャ

2-2. 「+=」で追記する

↑ str_02_2.py

↑ str_02_2.pyの結果

↑ 結果のキャプチャ

2-3. 「*」で指定回数分繰り返す

↑ str_02_3.py

↑ str_02_3.pyの結果

↑ 結果のキャプチャ

3. 文字列へ変換

数値を文字列に変換(str関数)

↑ str_03_1.py

↑ str_03_1.pyの結果

↑ 結果のキャプチャ

テキストと数値を混ぜた文章を作成し表示させようとしますが、エラーとなります。
これはPHPでは出ないエラーですね。

エラーメッセージには『TypeError: can only concatenate str (not "int") to str』とあり、直訳すると『strはstrとしか結合できません』となり、翻訳すると『strとintは結合できません』となる感じでしょうか。
ちなみにconcatenateは「結合るする、連結する」という意味の英単語です。

ということで、数値を文字列に変換するstr関数の出番です。

print関数のkion変数に、str変数を当てながら実行すると。。。

↑ 今度は問題なく表示されました

↑ 結果のキャプチャ

4. 文字列の置換

replaceメソッド

文字列の置換にはreplaceメソッドを使用します。
replace()の第一引数に検索する文字列、第二引数に新しい文字列を指定します。

↑ 無事、ジョナサンがジョセフに変換されました

↑ 結果のキャプチャ

なお、replaceは関数ではなく、メソッドと呼ばれます。
関数とメソッドの違いは使い方、呼び出し方が、『第一引数に自分を呼び出したオブジェクトを代入するか、しないか』という違いがあり、変数や値の後にドット(.)を付けて呼び出します。

より単純にまとめると、

  • 単独で呼び出しできるのが「関数」(≒ オブジェクトを代入しない)
  • 変数や値に付けて呼び出すのが「メソッド」(≒ オブジェクトを代入する)

となります。

上の例でもstr変数にドットでつないでreplaceを使用する形となっています。

5. 文字列の分割

splitメソッド

文字列の分割はsplitメソッドを使用します。
spritメソッドは特定の区切り文字を指定して文字列を区切ることができ、戻り値は「リスト(list)」という形で返します。なお、区切り文字のデフォルトは空白文字となります。

↑ 結果はリスト形式で返されました(見た感じ、JSのオブジェクトとよく似ていますね)

↑ 結果のキャプチャ

spritメソッドの第二引数では分割回数を指定することができます。
次のコードでは2回分割しているので、’Jonathan’と、’Joseph’、’Jotaro-Josuke-Giorno’の3つに分割されます。

↑ 結果

↑ 結果のキャプチャ

6. 文字列の桁揃え

rjustメソッド

文字列の左に値を埋める場合はrjustメソッドを使います。
rjust()の第一引数が埋めた後の桁数、第二引数が埋め込む文字列です。
ゼロ以外の文字列も埋め込み可能です。

zfillメソッド

特定の文字列を指定せずゼロで桁埋めする場合はzfillメソッドを使います。

7. 文字列の検索

7.1 findメソッド / rfindメソッド

findメソッドは指定の文字列の位置をインデックス番号で返します。
見つからない場合は-1を返します。

インデックス番号とは0から始まる、文字の位置番号と考えてもらって問題ありません。

findメソッド

↑ 前から検索していくので、先頭ということで「0」が返ります。
Linux という「文字のかたまり」を検索対象として指定しているので、それがあたった番号を返します。

↑ 同じ文字列で Apache を検索対象文字とした場合は「5」が返ります。

↑もっと単純な文字列にして、対象文字を検索。左から参照していくので、1が返ります

rfindメソッド

rfindメソッドは、指定の文字列を後ろ(右端)から探してその位置(インデックス番号)を返します。
インデックス番号は、左端からの位置を返します。

↑ 2回めの「b」を検索し、左端からのインデックス番号である4が返ります

7.2 countメソッド

該当する文字がいくつ存在するかを知りたい時はcountメソッドを使います。

↑ 日本語でも問題ありません。
早口言葉で有名な語句の中から「ぴょこ」の個数をカウントすると8が返ります。

↑ 1個しかない語句を対象とすると、ちゃんと1が返ります

7.3 in文

指定の文字列が存在するかどうかをブール値(True or False)で返します。

↑ 含まれる文字だとTrueが返ります

↑ 含まれない文字だとFalseが返ります

8. 大文字・小文字変換

指定の文字列を大文字・小文字へ変換するにはupperメソッドもしくはlowerメソッドを使います。
読んで字のごとく、upperメソッドで大文字、lowerメソッドで小文字化します。

9. 先頭・末尾の削除

stripメソッド・lstripメソッド・rstripメソッド

両端にある不要な文字列の削除にはstripメソッドを使います。
lstripメソッドは先頭文字(左)、rstripは末尾文字(右)にあるものを削除します。
引数で消したい文字を指定することができ、引数を指定しない場合は空白を除去します。

↑ 空白が削除されました

↑ (わかりにくいですが)空白が削除されました

↑ 文字列の前後にある空白が削除されました

↑ 左端の「Jo」が削除された結果が返ります

-Python
-