Pythonの文字列操作【プログラミング初心者向け教材】

プログラミング

プログラミングをしていると、文字列を結合したい、文字列を抽出したいということがありますが、「どう記述するんだっけ」といつも調べている方はいないでしょうか。

僕もその一人で、決して全部を覚える必要はないと思っているのですが、調べるにも時間はかかるので一度まとめてみることにしました。

本記事では、Pythonの文字列操作について、やりたい操作ごとにまとめてみました。

操作ごとにまとめているので、単なるメソッドの書き方だけでなく、該当するメソッドが直接ない場合にも、別の方法を含めて記載しています。

忘れた時に調べやすく、復習しやすいように心がけていますので、一人でも多くの方に役立てていただけたら幸いです。

なお、記載しているプログラムは、Python3.6を使って動作確認をしています。

Pythonの文字列操作

必要な文字列操作として、以下の内容をとりあげます。

  • 文字列を結合したい
  • 文字列を抽出したい
  • 文字列の長さを求めたい
  • 文字列を検索したい
  • 文字列を置換したい
  • 文字列を削除したい
  • 文字列を配列に分割したい
  • 文字列をトリミングしたい
  • 文字列をパディングしたい
  • 文字列を大文字・小文字に変換したい
  • 文字列を数値に変換したい
  • 数値を文字列に変換したい
  • 文字列が一致しているか確認したい

文字列を結合したい

最も単純なのは、+演算子で結合する方法です。
Pythonでは、文字列と数値を+演算子によって結合することはできません。行いたい場合には、数値を文字列に変換してから結合する必要があります。

s1 = "Hello"
s2 = "Python"
r = s1 + s2
print(r) # HelloPython

分割された配列の中身を結合したい場合は、joinを使います。
joinを呼出す文字列に、文字列同士の間に含めたい文字列を指定し、引数に配列を指定します。

a = ["Python","Hello","World"]
r = " ".join(a) # スペースを間に入れて結合
print(r) # Python Hello World

printf形式と呼ばれる記述方法を使って、文字列に埋め込むことで結合のようにすることもできます。

s1 = "Python"
s2 = "Hello"
r = "%s %sWorld!!" % (s1, s2)
print(r) # Python HelloWorld!!

バージョン3以降はformatを使うこともできます。

s1 = "Python"
s2 = "Hello"
r = "{0} {1}World!!".format(s1, s2)
print(r) # Python HelloWorld!!

バージョン3.6以降はフォーマット済み文字列リテラル(f文字列)を使うこともできます。

s1 = "Python"
s2 = "Hello"
r = f"{s1} {s2}World!!"
print(r) # Python HelloWorld!!

文字列を抽出したい

文字列から一部を抽出するには、文字のインデックス(開始:終了)を指定することで切り出すことができます。
インデックスのどちらか一方のみを指定することもできます。
最初の文字はインデックス0から始まることに注意が必要です。

s = "Hello Python!!"
r = s[7:13]
print(r) # Python

インデックスにマイナス値を指定した場合は、後方からマイナス値分の文字列を切り出します。

s = "Hello Python!!"
r = s[-8:-2]
print(r) # Python

文字列の長さを求めたい

文字列の長さを調べるには、lenを使います。

s = "1234567890"
r = len(s)
print(r) # 10

日本語のなどのマルチバイトの文字では、lenの結果がpython2とpython3で異なるので注意が必要です。

s = "あいうえお"
r = len(s)
print(r) # python2で実行すると10、python3で実行すると5

python2でも文字数としてカウントする場合には、文字列の先頭に「u」を付けて、ユニコード化する必要があります。

文字列を検索したい

文字列の中に、特定の文字列を含んでいるかどうかを検索するには、find、count、in文、startswith、endswithを用いる方法があります。

findは指定した文字列が含まれていれば、その文字列の開始位置を返します。
含まれない場合は-1を返します。

また、findは文字列を先頭から検索していき、最初に見つけた開始位置を返しますが、後方から検索したい場合には、rfindを使用します。

s = "Hello Python!!"
r = s.find("!")
print(r) # 12
s = "Hello Python!!";
r = s.rfind("!");
print(r); # 13

countは、該当する文字列がいくつか存在するかを返します。

s = "Hello Python!!"
r = s.count("!")
print(r) # 2

in文を使うと、指定する文字列が存在した場合にTrueを返し、存在しない場合にはFalseを返します。

s = "Hello Python!!"
r = "!" in s
print(r) # True

startswithは、文字列の先頭に指定した文字列が存在した場合にTrueを返し、存在しない場合にはFalseを返します。
第2引数に検索を開始する位置、第3引数に検索を終了する位置を指定することもできます。

s = "Hello Python!!"
r = s.startswith("Hello")
print(r) # True

endswithは、文字列の末尾に指定した文字列が存在した場合にTrueを返し、存在しない場合にはFalseを返します。
第2引数に検索を開始する位置、第3引数に検索を終了する位置を指定することもできます。

s = "Hello Python!!"
r = s.endswith("!!")
print(r) # True

文字列を置換したい

文字列の置換は、replace、translateを用いる方法があります。

replaceは、文字列全体に対して、引数に置換前の文字列と置換後の文字列を指定します。
また、3つ目の引数に置換回数を指定することもできます。指定しない場合はすべて置換されます。

s = "Hello Java!!"
r = s.replace("Java", "Python")
print(r); # Hello Python!!

translateは、一文字を別の一文字に置換します。複数の置換文字を指定することができます。

s = "Hello Python!!"
r = s.translate(str.maketrans({
    '!':'?'
}))
print(r); # Hello Python??

文字列を削除したい

文字列の中から特定の文字列をすべて削除(除去)するには、上記の置換後の文字列に空文字を指定します。

s = "Hello Python!!"
r = s.replace("!", "")
print(r); # Hello Python
s = "Hello Python!!"
r = s.translate(str.maketrans({
    '!':''
}))
print(r); # Hello Python

文字列を配列に分割したい

文字列を特定の文字で区切って配列にするには、splitを使います。
CSVやTSVの各要素を配列に分割するような場面でよく使われます。
第2引数に分割数を指定することができ、splitは左から分割、rsplitで右から分割することができます。

s = "JavaScript,Python,Java,Ruby,Go"
r = s.split(",")
print(r) # [ 'JavaScript', 'Python', 'Java', 'Ruby', 'Go' ]

文字列をトリミングしたい

文字列の中から前後の文字や空白を削除(除去)するには、stripを用います。

stripは両端の指定した文字列を削除します。左端のみ削除したい場合はlstrip、右端のみ削除したい場合はrstipで削除可能です。

s = " Hello Python!! "
r = s.strip()
print(r) # 「Hello Python!!」
s = "Hello Python!!"
r = s.lstrip("Hello ")
print(r) # Python!!
s = "Hello Python!!"
r = s.rstrip("!")
print(r) # Hello Python

文字列をパディングしたい

文字列の前後に何かの文字を付加することをパディング(詰め物)と呼びます。
Pythonでは右寄せ0埋めをzfillを使って行うことができます。
その他、左寄せをljust、中央寄せをcenter、右寄せをrjustを使って指定した文字列の長さにすることができます。
また、format、f文字列でフォーマットを指定することで、任意のパディングを行うことができます。

zfillは、指定した文字列長になるように、文字列前に0をパディングします。

s = "123"
r = s.zfill(10)
print(r) # 0000000123

ljustは、指定した文字列長になるように、文字列後に指定した文字をパディングします。

s = "123"
r = s.ljust(10, "0")
print(r) # 1230000000

centerは、指定した文字列長になるように、文字列前後に指定した文字をパディングします。

s = "123"
r = s.center(10, "0")
print(r) #0001230000

rjustは、指定した文字列長になるように、文字列前に指定した文字をパディングします。

s = "123"
r = s.rjust(10, "0")
print(r) # 0000000123

formatを使って、パディングも含め、任意の書式に変換することができます。

s = "123"
r = format(s, "0>10")
print(r) # 0000000123

文字列を大文字・小文字に変換したい

文字列をすべて大文字に変換するには、upperを使います。

s = "Python"
r = s.upper()
print(r) # PYTHON

文字列をすべて小文字に変換するには、lowerを使います。

s = "Python"
r = s.lower()
print(r) # python

文字列を数値に変換したい

文字列を数値に変換するには、intに指定して変換します。

s = "123"
r = int(s)
print(r) # 123
print(type(r)) # <class 'int'>

数値を文字列に変換したい

数値を文字列に変換するには、strに指定して変換します。

n = 123
r = str(n)
print(r) # 123
print(type(r)) # <class 'str'>

文字列が一致しているか確認したい

文字列同士が一致しているかどうかは、==演算子を使って確認できます。

==演算子は、一致していればTrue、一致していなければFalseを返します。

s1 = "123"
s2 = "123"
r = (s1 == s2)
print(r) # True

様々なメソッドを使いこなせるようになろう

実際の開発現場でも今回紹介した文字列操作はよく使われます。

どの言語でも文字列を操作するための便利な機能はたくさん用意されています。

これらをできるだけ使うことで、生産性の向上、ミスの削減、読みやすいコードへつなげることができ、プログラマーとしても成長することができます。

今回は、Pythonの文字列操作についてまとめてみました。

参考になれば幸いです。

コメント

タイトルとURLをコピーしました