Pythonができる文字列の事。下巻:文字列メソッド

まえがき

この記事ではPython3の文字列メソッドを取り上げる。全てではないが概ね使用頻度の高いと思われるメソッドを選んだ。簡易的な説明の後に実際のソースコードとそれを実行した結果を記載した。

半角英数字などの1バイト文字しか使わない言語圏用としか思えないメソッドもあるが、とりあえず取り上げてみた。ちなみに全角のカタカナを半角にするメソッドは無い?(調査中)。

この記事の開発環境

  • バージョン: Python3.8
  • IDE: spacemacs
  • ライブラリ: 標準モジュール
  • 環境構築: pyenv、pyenv-virtualenv
  • OS: macOS

文字列メソッドの一覧と使い方

変化系メソッド

  • upper() ・・・文字列の全てを大文字に変換した文字列を返す。英文字である必要がある。
  • lower() ・・・文字列の全てを小文字に変換した文字列を返す。英文字である必要がある。
  • swapcase() ・・・文字列全てに対して大文字→小文字、小文字→大文字の変換をして返す。(英文字)
  • encode() ・・・文字列をバイナリ型に変換する。
  • decode() ・・・バイナリ型を文字列型に変換する。(bytes[]型の関数

変化形メソッドの動作確認ソースコード

# 確認用変数
eiji_str1 = "abcdefg"
eiji_str2 = "ABCDEFG"
eiji_str3 = "AbCdEfG"
eiji_num_str = "AbC33dEfG"
kongou_str = "A千B紫C万d紅e大f車g輪"

# 1.大文字にする
eiji_str1.upper()
eiji_str2.upper()
eiji_str3.upper()
eiji_num_str.upeer()
kongou_str.upper()

# 2.小文字にする
eiji_str1.lower()
eiji_str2.lower()
eiji_str3.lower()
eiji_num_str.lower()
kongou_str.lower()

# 3.大文字を小文字、小文字を大文字
eiji_str1.swapcase()
eiji_str2.swapcase()
eiji_str3.swapcase()
eiji_num_str.swapcase()
kongou_str.swapcase()

# 4.文字列型⇆バイナリ型
str_enco_bin = kongou_str.encode('utf-8')
bin_denco_str = str_enco_bin.decode()

変化形メソッドの実行結果

変化形メソッドの実行結果
変化形メソッドの実行結果

改造系メソッド

  • join() ・・・文字列の入った配列を連結した1つの文字列として返す。(配列が引数になる)
  • split() ・・・文字列を引数で区切って配列に格納する。(日本語の場合は、、、使いにくい?)
  • replace() ・・・文字列の中で、第1引数を第2引数に置換する。
  • capitalize() ・・・文字列の先頭を大文字に変換し、それ以降は全て小文字にする。英文字である必要がある。
  • rjust() ・・・文字列を第1引数のの範囲内で右寄せにする。第2引数の文字で残りを埋める。
  • ljust() ・・・文字列を第1引数のの範囲内で左寄せにする。第2引数の文字で残りを埋める。
  • center() ・・・文字列を第1引数のの範囲内で中央寄せにする。第2引数の文字で残りを埋める。
  • strip() ・・・文字列に含まれる空白文字を除去する。(範囲は全体)
  • rstrip() ・・・文字列の先頭にある空白文字を除去する。
  • lstrip() ・・・文字列の末尾にある空白文字を除去する。

改造系メソッドの動作確認ソースコード

# 確認用変数
list_strs1 = ["Porshe", "Subaru", "Ford", "Aston Martin"]
list_strs2 = ["ABC", "DEF", 333, ["柿", "栗", "桃"] ]
# 5.配列の文字列を結合する
"_".join(list_strs1)
"_".join(list_strs2)


# 確認用変数
str_replace1 = "Moon Walker."
str_replace2 = "青汁"
# 6.置換処理
str_replace1.replace("Moon", "Sky")
str_replace2.replace("青", "豚")


# 確認用変数
str_list1 = "Apple,Banana,Orange"
str_list2 = "春夏秋冬"
str_list3 = "春,夏,秋,冬"
# 7.文字列を区切って配列に格納する
str_list1.split(",")
str_list2.split()
str_list3.split(",")


# 確認用変数
cap_str1 = "i lost my iPhone"
cap_str2 = "aaa青梗菜zzz"
# 8.先頭を大文字に、それ以外は小文字にする
cap_str1.captalize()
cap_str2.captalize()


# 確認用変数
yoseru_str1 = "ZZZ"
yoseru_str2 = "橙色"
# 9.右寄せにする
yoseru_str1.rjust(20, "#")
yoseru_str2.rjust(20, "-")
# 10.左寄せにする
yoseru_str1.ljust(20, "%")
yoseru_str2.ljust(20, "&")
# 11.中央寄せにする
yoseru_str1.center(20, "=")
yoseru_str2.center(20, "~")


# 確認用変数
space_str1 = " to be or not to be. "
space_str2 = "\tORA\nNGE"
space_str3 = " 吾輩も猫である。 "
# 12.空白文字を除去
space_ste1.strip()
space_ste2.strip()
space_ste3.strip()
# 13.右にある空白文字を除去
space_ste1.rstrip()
space_ste2.rstrip()
space_ste3.rstrip()
# 14.左にある空白文字を除去
space_ste1.lstrip()
space_ste2.lstrip()
space_ste3.lstrip()

改造系メソッドの実行結果

5。配列の文字列を結合するでは数値型を文字列型に変換したりはしない。数値が見つかった時点でエラーとなっているが配列が見つかっても同じようにエラーとなるだろう。試せばよかったが。

改造系メソッドの実行結果1
改造系メソッドの実行結果1

空白文字の除去では改行は無くならないことはわかった。

改造系メソッドの実行結果2
改造系メソッドの実行結果2

判定系メソッド

  • isupper() ・・・文字列が全て大文字ならTrueを返す。それ以外はFalse。
  • islower() ・・・文字列が全て小文字ならTrueを返す。それ以外はFalse
  • isalpha() ・・・文字列が全て英文字のみの構成ならTrueを返す。それ以外はFalse。
  • isalnum() ・・・文字列が全て英文字か数字のみの構成ならTrueを返す。それ以外はFalse。
  • isspace() ・・・文字列が全て空白文字のみの構成ならTrueを返す。それ以外はFalse。
  • istitle() ・・・文字列が大文字で始まり残りが小文字で構成されているならTrueを返す。それ以外はFalse。
  • startswith() ・・・文字列が引数の文字列で始まるならTrueを返す。それ以外はFalse。
  • endswith() ・・・文字列が引数の文字列で終わるならTrueを返す。それ以外はFalse。

判定系メソッドの動作確認ソースコード

# 確認用変数
upper_lower_str1 = "ABCDEF"
upper_lower_str2 = "AbCdEf"
upper_lower_str3 = "abcdef"
upper_lower_str4 = "abc空蝉def"
# 15.大文字の判定
upper_lower_str1.isupper()
upper_lower_str2.isupper()
upper_lower_str3.isupper()
upper_lower_str4.isupper()
# 16.小文字の判定
upper_lower_str1.islower()
upper_lower_str2.islower()
upper_lower_str3.islower()
upper_lower_str4.islower()


# 確認用変数
alpha_num_str1 = "orange"
alpha_num_str2 = "2orange"
alpha_num_str3 = "2 orange"
alpha_num_str4 = "orange蜜柑"
# 17.英字の判定
alpha_num_str1.isalpha()
alpha_num_str2.isalpha()
alpha_num_str3.isalpha()
alpha_num_str4.isalpha()
# 18.英字または数字の判定
alpha_num_str1.isalnum()
alpha_num_str2.isalnum()
alpha_num_str3.isalnum()
alpha_num_str4.isalnum()


# 確認用変数
space_str1 = " "
space_str2 = " "
space_str3 = "\n\t"
space_str4 = " i phone "
# 19.空白文字の判定
space_str1.isspace()
space_str2.isspace()
space_str3.isspace()
space_str4.isspace()


# 確認用変数
title_str1 = "I heard there was a secret code."
title_str2 = "Lion"
title_str3 = "羅生門"
# 20.大文字始まりその他小文字の判定
title_str1.istitle()
title_str2.istitle()
title_str3.istitle()


# 確認用変数
start_end_str1 = "愛新覚羅溥儀"
start_end_str2 = "_愛新覚羅溥儀_"
# 21.始まる判定
start_end_str1.startswith("愛")
start_end_str2.startswith("愛")
# 22.終わる判定
start_end_str1.endswith("儀")
start_end_str2.endswith("儀")

判定系メソッドの実行結果

この実行結果で面白いのは、2バイト文字を無視しているようなところだ。16の4番目がTrueになるのは英文字が大文字か小文字かしか判断していない証拠だろう。isalpha()とisalnum()についても同様で英文字の部分しか見ていない。一方で、スペースが入っているものはFalseとなっている。

正確には、文字列に含まれる英文字についての判定ということになるのだろう。

判定系メソッドの実行結果1
判定系メソッドの実行結果1

19の空白文字の判定では、文字列がタブと改行でもTrueになるが、前出の12空白文字を除去するでは改行は取り除かれない。

始まりと終わりの検索はそのままと言った感じ。

判定系メソッドの実行結果2
判定系メソッドの実行結果2

検索系メソッド

  • find() ・・・検索文字列を左から探し、最初に見つかった検索文字列の始まりのインデックスを返す。無ければは−1を返す。
  • rfind() ・・・find()を右から探すバージョン。
  • index() ・・・find()と同じだが、見つからない場合はエラーとなる。
  • rindex() ・・・index()の右から探すバージョン。

検索系メソッドの動作確認ソースコード

# 確認用変数
sagasu_str = "桃色桃レンジャー"
# 23.findで探す
sagasu_str.find("桃")
sagasu_str.find("柿")
sagasu_str.rfind("桃")
sagasu_str.rfind("柿")
# 24.indexで探す
sagasu_str.index("桃")
sagasu_str.index("柿")
sagasu_str.rindex("桃")
sagasu_sstr.rindex("柿")

検索系メソッドの実行結果

index()で見つからない場合はエラーとなるので実行の時はtry~except節を使って実行している。index()の使い道はよくわからない。find()でいいんじゃ無いかと思う。

索系メソッドの実行結果
索系メソッドの実行結果

むすび

色々とメソッドがあるので必要になったら、Python:ドキュメントをみよう。別の記事でやっているパスワードマネージャの制作に本格的に入る前に一通りPythonの基本を確認しておきたい。

コメントする