Python3の文字列操作まとめ

スポンサーリンク

自分の学習用メモも兼ねて、Python3の文字列操作についてまとめてみました。
便利そうなものを見つけたら随時追加していきます。

文字列の検索、置換に関してはこの記事では軽くしか扱っていません。
別で正規表現についての記事でも書いて、そこでまとめて扱いたいと思ってます。

Python3で文字列操作

他のデータ型から文字列への変換 : str()

>>> str(100)
‘100’
>>> str(99.9)
‘99.9’
>>> str(True)
‘True’

文字列の連結 : + 演算子

>>> ‘I do not care ‘ + ‘what you might think about me.’
‘I do not care what you might think about me.’

使いどころはよく分からないが、文字列リテラル同士をただ並べるだけでも文字列を連結できる。

>>> ‘I do not care ‘ ‘what you might think about me.’
‘I do not care what you might think about me.’

文字列の繰り返し : * 演算子

*演算子と整数の組み合わせで、直前の文字列を任意の回数繰り返す。

>>> ‘hoge’ * 2
‘hogehoge’
>>> ‘hoge’ * 4
‘hogehogehogehoge’
>>> ‘hoge’ * 8
‘hogehogehogehogehogehogehogehoge’

文字のオフセットを指定して取り出す(オフセット) : []

文字列の直後に角かっこ [] で囲んだオフセットを指定すると、その位置にある文字を取り出せる。

>>> str = 'abcdef'
>>> str[0] 'a'
>>> str[1] 'b'

負の整数を指定すると、末尾からの位置を指定する。

>>> str[-1] 'f'

文字列の長さを超えて、存在しないオフセットを指定すると例外が起きるので注意。

>>> ‘abcdef'[100] Traceback (most recent call last):
File ““, line 1, in
IndexError: string index out of range

また、[]でオフセットで指定するやり方では、直接文字列の中身を置き換えたりすることはできない。

>>> str[0] = ‘A’
Traceback (most recent call last):
File ““, line 1, in
TypeError: ‘str’ object does not support item assignment

文字列を置き換えたい場合は、replace()関数を使う。

>>> str.replace(‘a’,’A’)
‘Abcdef’

文字列の一部を抽出する : [start:end:step]によるスライス

角かっこと先頭オフセット(start)、末尾オフセット(end)、ステップ(step)をしていすると、文字列の一部(部分文字列)を取り出すことができる。

[:]は、先頭から末尾までのシーケンス全体を指定する。

>>> str = ‘abcdefghijklmn’
>>> str[:] ‘abcdefghijklmn’
[start:]で、startオフセットから末尾までのシーケンスを取り出す。

>>> str = ‘abcdefghijklmn’
>>> str[5:] ‘fghijklmn’
[start:end]で、startオフセットからend-1オフセットまでを取り出す。

>>> str = ‘abcdefghijklmn’
>>> str[2:5] ‘cde’

startオフセットにマイナスの数を指定すると、末尾から取り出す。

>>> str = ‘abcdefghijklmn’
>>> str[-3:] ‘lmn’

start,endオフセットを省略し、stepのみ指定すると、指定した数ごとに文字を取り出す。
下記の例ではシーケンス全体から2文字ごと(1字飛ばし)で文字を抽出。

>>> str = ‘abcdefghijklmn’
>>> str[::2] ‘acegikm’

stepにマイナスの数を指定すると、末尾から先頭に向かって逆方向にステップしていく。
なので、下の例のようにstart=-1(末尾の1文字目),step=-1(逆方向に1文字ごと、文字を飛ばさない)を指定すると、文字列を逆順に取り出せる(=ソートできる)。

>>> str = ‘abcdefghijklmn’
>>> str[-1::-1] ‘nmlkjihgfedcba’

文字列の長さを取得する : len()

>>> str = ‘How long is this?’
>>> len(str)
17
>>> empty = ”
>>> len(empty)
0

ちなみに、len()関数を実行するとintが返る。

>>> type(len(‘hoge’))
<class ‘int’>

文字列の分割 : split()

引数にセパレータを指定し、文字列を分割する。

>>> data = ‘id,name,age,phone,email,occupation’
>>> data.split(‘,’)
[‘id’, ‘name’, ‘age’, ‘phone’, ‘email’, ‘occupation’]

実行結果は文字列のリスト。

>>> type(data.split(‘,’))
<class ‘list’>

セパレータを指定せずにsplit()を使うと、改行、スペース、タブをセパレータとして処理が行われる。

>>> str = “I don’t care \n what you might think\tabout me”
>>> str.split()
[‘I’, “don’t”, ‘care’, ‘what’, ‘you’, ‘might’, ‘think’, ‘about’, ‘me’]

文字列の結合 : join()

split()の逆。リストを連結して単一の文字列を生成する。

ちょっと気持ち悪い気がするのだけれど、下記のように、結合する要素と要素の間に差し込む区切り文字(スペースやカンマなど)を指定してから、join()の引数に結合対象のリストを渡す。

'<区切り文字>'.join('<対象のリスト>')

>>> str_list = [‘I’, ‘don\’t’, ‘care’, ‘what’, ‘you’, ‘might’, ‘think’, ‘about’, ‘me’] >>> ‘ ‘.join(str_list)
“I don’t care what you might think about me”
>>> data = [‘id’, ‘name’, ‘age’, ‘phone’, ‘email’, ‘occupation’] >>> ‘, ‘.join(data)
‘id, name, age, phone, email, occupation’
>>> ‘/ ‘.join(data)
‘id/ name/ age/ phone/ email/ occupation’

先頭の文字と一致するか調べる : startswith()

対象の文字列が、引数に渡された文字列で始まるかどうか調べる。
True / Falseが返る。

>>> str = “I don’t care what you might think about me.”
>>> str.startswith(‘I’)
True
>>> str = “I don’t care what you might think about me.”
>>> str.startswith(‘I don\’t’)
True

大文字と小文字は区別される。

>>> str = “I don’t care what you might think about me.”
>>> str.startswith(‘i’)
False
>>> str = “I don’t care what you might think about me.”
>>> str.startswith(‘you’)
False

末尾の文字と一致するか調べる : endswith()

対象の文字列が、引数に渡された文字列で終わっているか調べる。
True / Falseが返る。

>>> str = “I don’t care what you might think about me.”
>>> str.endswith(‘.’)
True
>>> str.endswith(‘about me.’)
True
>>> str.endswith(‘!!’)
False

文字列が含まれるか調べる : find(), rfind()

引数にわたされた文字列がはじめに現れる箇所のオフセットを返す。

>>> str = ‘hoge huga hoge hoge huga hoge’
>>> str.find(‘hoge’)
0
>>> str.find(‘huga’)
5

rfind()を使うと、逆に最後に現れるオフセットを調べられる。

>>> str.rfind(‘hoge’)
25
>>> str.rfind(‘huga’)
20

文字列が何回出現するか調べる : count()

引数に渡された文字列が、対象の文字列中に何度出現するか調べる。

>>> str = ‘hoge huga hoge hoge huga hoge’
>>> str.count(‘hoge’)
4
>>> str.count(‘huga’)
2

文字列が全て数字か英字になっているか判別 : isalnum()

数字と英字以外、記号などが含まれているとfalse。

>>> numbers = ‘123,456’
>>> numbers.isalnum()
False
>>> numbers = ‘123456’
>>> numbers.isalnum()
True
>>> ‘hoge123’.isalnum()
True

文字列の両端から文字を取り除く : strip()

文字列の両端(先頭と末尾)から、スペースと改行文字を取り除く。

>>> str = ” I don’t care what you might think about me \n”
>>> str.strip()
“I don’t care what you might think about me”

引数に文字を指定すると、両端からその文字を取り除く。

>>> str = “I don’t care what you might think about me…”
>>> str.strip(‘.’)
“I don’t care what you might think about me”

先頭の単語をタイトルケースに(先頭文字だけ大文字): capitalize()

>>> str = “i don’t care what you might think about me”
>>> str.capitalize()
“I don’t care what you might think about me”

全ての単語をタイトルケースに : title()

>>> str = “i don’t care what you might think about me”
>>> str.title()
“I Don’T Care What You Might Think About Me”

全ての文字を大文字に変換 : upper()

>>> str.upper()
“I DON’T CARE WHAT YOU MIGHT THINK ABOUT ME”

全ての文字を小文字に変換 : lower()

>>> str.lower()
“i don’t care what you might think about me”

大文字と小文字を入れ替えて逆にする : swapcase()

>>> str = “I Don’T Care What You Might Think About Me”
>>> str.swapcase()
“i dON’t cARE wHAT yOU mIGHT tHINK aBOUT mE”

文字列の置換 : replace()

>>> str = “I don’t care what you might think about me”
>>> str.replace(‘you’,’he’)
“i don’t care what he might think about me”

参考にしたもの

Pythonで文字列の先頭と末尾から空白や文字列を削除する:strip() - UX MILK
http://uxmilk.jp/12804

ABOUTこの記事をかいた人

職業:遊び人。1日の半分は睡眠時間の超ロングスリーパー。元大手IT企業のサラリーマンだったが、ブラックな労働環境で体を壊した挙句クビになり、やむをえず独立。それ以来定職にもつかず、半分遊びのようなヌルい仕事をしながら適当に暮らしている。良く言えばノマドワーカー。 詳しいプロフィールはこちら