[Work/Class/Python3の基礎とデータ処理/python_basic]

Pythonでの文字列の取り扱い

文字列オブジェクトの中身は弄れない

Pythonでは文字列オブジェクトの中身は弄ることができない.(「オブジェクト自分自身」へ足していくappendなどがない)

従って,連結などの操作をした上で,その結果を「他の変数へ代入」する必要がある.(つまり文字列オブジェクトの操作は「非破壊的」である)

逆に言えば,結果が文字列オブジェクト(文字列クラスのインスタンス)として出力されるので,関数チェーンが使えることになる.

連結

「+」演算子による連結

a = 'My'
b = 'foolish'
c = 'Heart'
d = a + ' ' + b + ' ' + c
print(d)

「join」メソッドを使ったリストの連結

my_words = list(['My', 'foolish', 'Heart'])
' '.join(my_words)

これは文字列クラスのインスタンスに用意されているjoin()関数を使って,listの中に入っていた文字列を連結した例である.listの各要素の間に,その文字列オブジェクトの中身が挿入される.この場合は半角スペース「' '」文字列オブジェクトのjoin()関数を呼び出しているため,listの各要素の間に半角スペースが入った文字列が出力される.

この連結方法は,スプリッタ文字を指定することで,コマンド文字列の生成などに使える.

数字が代入されている変数との連結

数字が代入されている変数と文字列を連結したい場合は,まず数字を文字列に変換しなければならないので,str()組み込み関数を使う.

my_string = 'これは文字列' + str(数字が入っている変数)
print(my_string)

のように連結する.

文字列の中へ値の埋め込み

上記のstr()関数を使って文字列の中に数字を埋め込んでも良いが,文字列オブジェクトに用意されているformat()関数を使う方法が,現在では推奨されているらしい.

my_string = '{0}と{1}'.format('最初の文字列ですよ!', '次の文字列ですよ!)
print(my_string)

他にもC言語のprintf()っぽく,

print('%sと%s' % ('最初の文字列ですよ!', '次の文字列ですよ!'))

と書く方法もある.

文字列の置き換え

happy_string = 'Ha, Ha! Today is Saturday!'
sad_string = happy_string.replace('Saturday', 'Monday')
print(sad_string)

文字列オブジェクトに用意されているreplace()関数を使うことで,第一引数の文字を第二引数に置き換えることができる.

前述の通り,文字列オブジェクトの操作は非破壊的なので,結果を他の変数に代入する必要がある.

何文字目かを指定して取り出す

my_string = 'abcdefg'
third_char = my_string[2]

いつものように0から始まることに注意.

-1を指定すると,最後の文字,-2を指定すると後ろから2番目の文字が出てくる.

何文字目から何文字目までを抜き出す

happy_string = 'Ha, Ha! Today is Saturday!'
extracted_string = happy_string[8:13]

で,8文字目から「12」文字目までを取り出すことができる.(〜までなので-1)

検索

文字列オブジェクトに用意されているfind()関数で,文字列の中を検索することができる.

find関数は,引数で与えられた文字列が見つかれば,その文字列の開始位置のindex(0~)を,見つからなければ-1を返す.

happy_string = 'Ha, Ha! Today is Saturday!'
today_index = happy_string.find('Today')

文字列をforで回す

文字列はlistと同じくfor文で回すことができる.

for a_char in 'abcdefghijklmn':
    print(a_char)

スプリット

文字列オブジェクトに用意されているsplit(区切り文字)関数で,区切り文字で連結されている文字列を分割して取り出すことができる.これをlistに突っ込めば取り扱うことができる.

command_string = 'BallInfo/Position/240/120/Color/255/40/60/Size/20'
command_list = command_string.split('/')