「文字列のサンプルコードで”f”を使っているものを見かけるか何をしているか知らない」
「不要な空白や記号が混じってる状態から文字列のみに変換する方法が知りたい」
「純粋な数字と数字の文字列によって動作するプログラムがあったりなかったりする気がする」
本日はそんな方に向けてPythonを使った文字列の操作について解説していきます。
Pythonにおける文字列の操作はプログラミングの基本的なスキルの一部として非常に重要です。
そこで今回は文字列操作に関する重要なメソッドや関数について詳しく解説していきます。
f文字列、joinメソッド、replaceメソッド、upperメソッド、lowerメソッド、stripメソッド、splitメソッド、int関数、mojimoji関数、zfillメソッドなど、さまざまな手法を使って文字列を効果的に操作する方法を実践的な例とともに紹介していきます。
これらの操作をマスターすることでより効率的かつ柔軟なPythonプログラミングが可能となりますので、ぜひ最後までご覧ください。
また動画もあるので必要な方は以下よりご覧ください。
Pythonで「f」を使った文字列の書き方
そもそもの話として2つの文字列を合体させたい場面というのがよくあります。
例えば苗字と名前が別の変数に格納されていて合体させることでフルネームとして表示するなどです。
そういった場合に一番シンプルなのは演算子の足し算をすることです。
print("yamada" + " " + "taro") # yamada taroと表示される
もしくはjoinメソッドを使って空白自体にjoinを実行することです。
joinメソッドは記号などの文字列に対して実行することで、その記号を境界線にして二つの文字列を合体させることができます。
文字列として評価できるものであれば何でも良くて以下のように半角スペースに対しても実行することが可能です。
text_list = ["yamada","taro"]
print(" ".join(text_list)) # yamada taroと表示される
文字列の合体にはいろんな方法がある中で近年の実務でよく使われるのがテンプレートリテラルと言って、文字列の先頭に「f」を記載する書き方です。
文字列の先頭に「f」を記載することによって、文字列内で${}としたエリアに変数や定数を埋め込むことができるようになります。
つまり以下のように文字列とデータを一緒に書くことができるわけです。
first_name = "yamada"
last_name = "taro"
print(f"{first_name} {last_name}") # yamada taroと表示される
もちろん空白もそのまま記載するだけなので書き方としては楽なわけですね。
Pythonで文字列の内容を変換する方法
続いても実務でよくあるケースとしてすでにある文字列について、「違う文字に変えたい」「大文字に変えたい」など途中で変更したい時です。
Pythonにはそんな文字列の変換について便利なメソッドがたくさんありますので紹介してみます。
まずは特定の文字に変更したいときはreplaceメソッドを使用します。
text1 = "aaa"
print(text1.replace("a","b")) # bbbと表示される
replaceメソッドは第一引数に変更前、第二引数に変更後の文字列を書くことで変換してくれるメソッドです。
また上記のように同じ文字が続いている場合に、「変換は1回だけ」という時もあります。
そのようなときはreplaceメソッドの第三引数に数字を記載することで実現できます。
text2 = "aaa"
print(text1.replace("a","b",1)) # baaと表示される
続いて英語表記によくある大文字→小文字、小文字→大文字の変換は以下のように書きます。
# 大文字に変換
text3 = "aaA"
print(text3.upper()) # AAAと表示される
# 小文字に変換
text4 = "aaA"
print(text4.lower()) # aaaと表示される
初心者がよく混乱するのが数字の表記です。
純粋な数字なのか文字列で書かれている数字なのかで、計算の可否が変わりますので文字列→数字に変換したいケースがあります。
text5 = "100"
print(int(text5)) # 100と表示される
とはいえ見た目では文字列なのか数字なのかわかりませんのでtypeメソッドを実行して型名を確認することをお勧めします。
text5 = "100"
print(type(text5)) # <class 'str'>と表示される
print(int(text5)) # 100と表示される
print(type(int(text5))) # <class 'int'>と表示される
英語と数字の他に日本語ならではのケースとして、全角→半角や半角→全角の変換をしたい時があります。
こちらは標準のメソッドでは用意されていないので専用のモジュールをインストールします。
pip install mojimoji
mojimojiというモジュールは日本語の変換をしてくれるもので以下のように使用します。
import mojimoji
text6 = "1,000"
text7 = "1,000"
print(mojimoji.zen_to_han(text6)) # 1,000と表示される
print(mojimoji.han_to_zen(text7)) # 1,000と表示される
Pythonで文字の検索、空白削除などをする方法
他にも便利なメソッドがありますので実際のコードを用いて紹介していきます。
まずは文字列の中に特定のキーワードがあるか検索するにはinというものを使って以下のように書きます。
text1 = "yamada taro"
print("taro" in text1) # Trueと表示される
また検索ではなく取得したいときにはリストのようにインデックス番号を指定します。
text1 = "yamada taro"
print(text1[7]) # tと表示される
こちら1点注意なのが文字列に評価されるものは全てインデックス番号の対象になるので空白も立派な文字としてカウントされます。
上記のコードだと空白は6番目になって以下のように実行しても何も表示されませんがエラーではありませんので注意しましょう。
text1 = "yamada taro"
print(text1[6]) # 空白なので何も表示されない
続いて文字列の先頭と末尾にある空白を削除するにはstripメソッドを実行します。
text2 = " yamda taro "
print(text2) # yamada taro と表示される
print(text2.strip()) #yamada taroと表示される
stripメソッドの便利な点は文中にある空白は削除しないことです、上記のような名前ではよくあるケースです。
続いて特定の境界を起点に文字列を二つの単語に分割するにはsplitメソッドで引数に境界となる記号やスペースを入れます。
text3 = "yamada taro"
print(text3.split(" ")) # ['yamada', 'taro']と表示される
splitメソッドは分割したものをリストにして返してくれるので繰り返し処理に転用したり、インデックス番号を指定すれば個別のキーワードだけ取得することも可能です。
続いて数字の桁数の違いを「0」で埋める方法は以下のようにします。
デジタル表記で数字を使いたいときによくあるケースです。
month1 = 1
month2 = 12
print(str(month1).zfill(2), str(month2).zfill(2)) # 01 12と表示される
month1, month2ともに純粋な数字のため一度strメソッドで文字列に変換します。
文字列に変換するとzfillという桁数を揃える特別なメソッドを使用することができるようになります。
zfillメソッドは引数に入れた桁数を守るために足りない部分を「0」で埋めてくれます。