文字列は読んで字の如く、複数の文字が連なって「文字が列になったもの」です。
ここでは文字列の基本から文字列の連結・変換・置換え等の文字列の操作を解説します。
Pythonの文字列
文字列の基本
Pythonで文字列を扱う時は、扱いたい文字列をシングルクォート(‘)か、ダブルクォート(“)で囲みます。
>>> print('うまい棒')
うまい棒
>>> print("棒うまい")
棒うまい
どちらを使っても大丈夫です。但し前後の記号は統一して下さい。
でも、何故2種類あるか疑問に思いませんか?
理由は、クォートを文字列内で扱う際に使い分けが必要になるからです。
文字列にシングルクォートがある場合
>>> print("I can't stop Umaibo")
I can't stop Umaibo
文字列にダブルクォートがある場合
>>> print('He said,"I have a Umaibo"')
He said,"I have a Umaibo"
複数行の文字列
複数行の文字列を扱う時は、三重引用符を用います。
シングル・ダブルどちらかのクォート記号3つで囲見ます。
>>> umaibo ="""
... 好きなうまい棒は
... 明太子味です。
... """
>>> print(umaibo)
好きなうまい棒は
明太子味です。
文字列の型はstrです
pythonも文字列型はstrです。
strは文字列(character string)のstringを省略したものです。
文字列の操作
文字列の長さを取得:len関数
Len関数を使うと、文字列をカウントし長さを表示してくれます。
len関数の書式
len(カウントしたい文字列)
>>> umaibo = 'mentai'
>>> print(len(umaibo))
6
len関数の使い方については以下の記事を参照願います。
→Python:len関数の使い方。文字列型やリスト型の数をカウント
文字列の連結・結合
文字列と文字列の連結は「 + 」演算子を使います。
文字列同士の連結
>>> umaibo = 'うまい' + '棒'
>>> print(umaibo)
うまい棒
文字列の変数を連結
>>> umai ='うまい'
>>> bo = '棒'
>>> umaibo = umai + bo
>>> print(umaibo)
うまい棒
ちなみに、「 * 」演算子を使うと指定回数繰り返します。
>>> hamaguchi = '気合いだ!' * 5
>>> print(hamaguchi)
気合いだ!気合いだ!気合いだ!気合いだ!気合いだ!
頑張れ!京子ちゃん。
文字列と数値の連結
文字列と数値も連結できますが、そのまま実行するとエラーになります。
>>> kakaku = 10
>>> print('うまい棒は' + kakaku + '円です')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can only concatenate str (not "int") to str
エラーメッセージを簡単に言うと「文字列型は文字列型だけしか連結できねーよ。ばか!」です。
怒られたので直しましょう。
数値を文字列に変換するstr関数
数値を文字列に変換すれば連結できるので、str関数を使って変換しましょう。
str( 数値 )
()内に変換したい数値を入力すればオッケーです。
>>> kakaku = 10
>>> print('うまい棒は' + str(kakaku) + '円です')
うまい棒は10円です
>>> kakaku_pre = 10
>>> kakaku = str(kakaku_pre)
>>> print('うまい棒は' + kakaku + '円です')
うまい棒は10円です
print内にstr関数を記述しても、str関数で変換した数値を変数に格納し表示してもどちらもオッケーです。
文字列の置換
文字列の一部、あるいは全部を置き換える時には、replace関数を使います。
文字列.replace('置換元文字列','置換後文字列')
Replaceは文字列型(str型)の関数ですので、「文字列.replace」となります。
()内の第一引数は置換元の文字列を記述し、第二引数は置換後の文字列を記述します。
>>> umaibo = 'まずい棒'
>>> print(umaibo.replace('まずい','うまい'))
うまい棒
まずい棒の「まずい」を「うまい」に置換えました。
文字列は変更不能(immutable)なオブジェクトですので、str型の変数「umaibo」が置き換わったわけではございません。
>>> umaibo = 'まずい棒'
>>> print(umaibo.replace('まずい','うまい'))
うまい棒
>>> print(umaibo)
まずい棒
分割
文字列の分割にはsplit関数を使用します。split関数は、文字列から指定した規則(区切る回数)で分割を行います。
戻り値はリスト化してくれますがリストについては以下に詳しく説明しています。
splitの記述方法
文字列.split(区切り文字,maxsplit=1)
文字列型(str型)の関数ですので、「文字列.split」となります。
区切り文字の部分には、文字列を分割する文字を指定します。未指定の場合は、空白文字で区切ります。
maxsplitは何回区切るかの指定ができます。省略可で未指定の場合は、全ての区切り文字で区切ります。
>>> umaibo ='うまい棒-明太子'
>>> umaibo_split = umaibo.split('-')
>>> print(umaibo_split)
['うまい棒', '明太子']
指定文字が「-」ですので、「うまい棒」「明太子」に分割されリスト化しています。
split関数は、スクレイピングや業務改善の際に、重宝している関数です。
ぜひ覚えて下さい。
検索(取得)
文字列の検索方法は様々ありますが、代表的なfind関数について説明します。
findの記述方法
文字列.find(‘検索する文字列’)
findも文字列型(str型)の関数ですので、「文字列.find」となります。
()内には検索する文字列を指定します。文字列が見つかった場合は、見つかった文字列の開始位置を返します。見つからなかった場合は -1 を返します。
>>> umaibo ='mentai'
>>> umaibo_find = umaibo.find('a')
>>> print(umaibo_find)
4
‘mentai’の’a’は5番目なのに何故’4’なのかと思った方もいるかと思います。
説明のために、‘mentai’の先頭文字である’m’をfindします。
>>> umaibo_find = umaibo.find('m')
>>> print(umaibo_find)
0
0が返ってきました。
listの添字等もそうなのですが、の開始位置のスタートは0からですので、5番目は「0,1,2,3,4」となるので’4’を返します。