Pythonの文字列型の宣言・操作とメソッドについて解説!

2021-03-05

Pocket

こんにちは、爽です。皆さん、いかがお過ごしでしょうか?

今回はPythonの文字列型の宣言・操作とメソッドについて確認します。
文字列型の操作は数値型の操作同様にプログラミングの基本ともなりますので、ぜひ覚えて頂ければと思います。

■この記事の対象読者
・Pythonに興味がある方
・Pythonを学び始めてみたい方

・Pythonで文字列を操作する方法を知りたい方

それではどうぞ!

文字列型の宣言方法

文字列型には2種類の宣言方法があります。

'(シングルクオート)を用いた宣言とデータ型の確認

まず最初は'(シングルクオート)で代入する値を囲って文字列型の変数を宣言する方法です。

#シングルクオートで宣言
str = 'Python'
str
>>'Python'

#変数のデータ型確認
type(str)
>> str

“(シングルクオート)を用いた宣言とデータ型の確認

次は“(ダブルクオート)で代入する値を囲って文字列型の変数を宣言する方法です。

#ダブルクオートで宣言
str = "programing"
str
>>'programing'

#変数のデータ型確認
type(str)
>> str

このようにPythonでは変数に代入したい値をシングルクオートとダブルクオートどちらかで囲むことによって、文字列型を宣言することができます。

文字列型のエスケープ

次は文字列型のエスケープについてです。
文字列型は代入したい文字をシングルクオート、またはダブルクオートで囲むことで宣言できますが、囲った文字の中に更にシングルクオートかダブルクオートが存在する場合は何も対処しないとエラーとなります。
具体的には以下を見ていただけるとわかると思います。

#シングルクオートの中に更にシングルクオートが存在している場合
talk = 'I don't know'
>> talk = 'I don't know'
                  ^
SyntaxError: invalid syntax

I don’t knowという文字列の中のdon’tの中にシングルクオートが含まれているので、プログラムとしては’I don’までが文字列措定解釈されます。
それ故、それ以降のt know’が一体何なのかがプログラムが解釈できず、変数宣言時にエラーとなるのです。
このエラーの回避策は2つあり、1つは文字列全体をダブルクオートで囲む、そしてもう1つはI don’t knowの中のシングルクオートの前に\(バックスラッシュ)を置くことでシングルクオートを文字として認識させる方法(エスケープ)です。

#I don't knowをダブルクオートで囲む
talk = "I don't know"
talk
>>"I don't know"

#I don't knowのシングルクオートを文字列として認識させるためには\(バックスラッシュ)を使ってエスケープする
talk = 'I don\'t know'
talk
>>"I don't know"

また、逆に文字列の中にダブルクオートがある場合は、その文字列をシングルクオートで囲む、または文字列の中のダブルクオートの前に\(バックスラッシュ)を付与してあげれば良いです。

文字列の改行

次は文字列を改行させる方法です。
文字列型を改行させる方法は2種類あって、1つは文字列を"""(ダブルクオート3つ)で囲む方法、そしてもう1つは改行したい文字列の直後に\nを入れてやる方法です。
具体的には以下を見ていただけるとわかると思います。

#文字列を"""(ダブルクオート3つ)で囲む
greetings = """Good morning.
Good afternoon.
Good evening."""
print(greetings)
>>Good morning.
Good afternoon.
Good evening.

#改行したい文字列の直後に\nを入れてやる
fruits = "apple\nbanana\norange"
print(fruits)
>>apple
banana
orange

\(バックスラッシュ)を文字列として認識させる

次は\(バックスラッシュ)を文字列として認識させる方法です。
前項の最後で\nは改行を表すと説明しましたが、例えば以下のようにファイル操作のためにディレクトリを記述しなければならないケースでは注意が必要です。

#\nが改行としてみなされてしまい、結果としてディレクトリをきれいに表示できない
path = "C:\name\name"
print(path)
>>C:
ame
ame

こういうケースでは、文字列の前にrを入れることで、\nを普通の文字列として認識させられるようになります。

#文字列の前にrを入れることで、ディレクトリがきれいに表示された
path = r"C:\name\name"
print(path)
>>C:\name\name

ちなみにrは"rawdata"という意味らしいです。

文字列の繰り返し

文字列を繰り返す為には*(アスタリスク)を使用します。

#文字列の連結のためには*(アスタリスク)を使用
repeat = "Hi." * 3
repeat
>>'Hi.Hi.Hi.'

文字列の連結

文字列を連結させる方法は3つあり、1つは+(プラス)を使用する方法、2つ目は()(丸かっこ)で文字列を括る方法、最後は\(バックスラッシュ)を使う方法です。

#+(プラス)を使用する方法
repeat + "Sou"
>>'Hi.Hi.Hi.Sou'

#(丸かっこ)で文字列を括る方法
str = ("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"bbbbbbbbbbbbbbbbbbbbbbbbbbb")
str
>>'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbb'

#\(バックスラッシュ)を使う方法
str = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"\
"bbbbbbbbbbbbbbbbbbbbbbbbbbb"
str
>>'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbb'

ただし、最後の2つは連結したい文字列が複数行に渡るときに使用する上、変数を繋げることはできないのであまり使わないかもしれません。

文字列の取り出し

次は文字列を取り出す方法です。
文字列を取り出す方法は、[](四角いかぎかっこ)でインデックスを指定する方法とスライスという方法の2種類あります。
特にスライスは機械学習分野にも応用できるのでぜひ覚えておくべきです。

#[](四角いかぎかっこ)で2番目の文字を取り出す
str = "Python"
str[1]
>>'y'

#[](四角いかぎかっこ)で最後の文字を取り出す
str[-1]
>>'n'

#スライスでインデックスの2番目から4番目を取り出す
str[2:4]
>>'th'

#スライスでインデックスの2番目から最後までを取り出す
str[2:]
>>'thon'

#スライスで最初からインデックスの4番目までを取り出す
str[:4]
>>'Pyth'

#スライスで最初から最後までを取り出す
str[:]
>>'Python'

気をつけるべきこととして、Javaなんかもそうですが、Pythonはインデックスを数えるときは0番目から数えます。
ですので、"Python"という文字列の"y"を取り出したい場合は、インデックスの0番目が"P"、インデックスの1番目が"y"という数え方をするので、str[1]と記述します。

#存在しないインデックスを指定するとエラー
str[10]
>>----> 1 str[10]

IndexError: string index out of range

なお、存在しないインデックスを指定すると、最後の例のようにエラーが表示されます。

format関数で文字列を代入

次は文字列をformat関数で代入する方法です。
アプリケーション開発の時に対話型のプログラムを作る時なんかに使える文法です。

#文字列をformat関数で代入
"python is {}".format("excellent")
>>'python is excellent'

#複数の文字列をformat関数で代入
"python is {} and {}".format("excellent","easy")

#インデックスを指定して代入
#format()の中のインデックスは0,1,2‥となる
#また、数字を入れた場合は文字列に変換される
"python is {1} and {0}".format(0,1)
>>'python is 1 and 0'

#変数を代入
str = "exellent"
"python is {}".format(str)
>>'python is exellent'

#Python3.6以上では以下のように書くこともできる
f'python is {str}'
>>'python is exellent'

#Python3.8以上では以下のように書くこともできる
f' {str=}'
>> str='exellent'"

最後の書き方はデバッグをするときに便利な書き方だと思います。

文字列を操作するメソッド

最後は文字列を操作するためのメソッドを紹介します。
文字列を操作するメソッドに限らず、Pythonには組み込み関数と呼ばれる、デフォルトで使える便利なメソッドが豊富にあります。
また、組み込み関数はPythonの公式ドキュメントがあるので、このブログでは一部だけ紹介します。
>>組み込み型(Python公式ドキュメント)

str = "Python Prgraming"

#encodeで文字列をbytes型に変更
byte_str = str.encode('utf-8')
type(byte_str)
>> bytes

#decodeでbytes型を文字列型に変更
str = byte_str.decode('utf-8')
type(str)
>> str

#countで指定した文字列がいくつかるかをカウント
str.count('P')
>>2

#startsWithとendswithで指定した文字列で始まっているかどうかを確認する
#なお、大文字と小文字は明確に区別される
str.startswith('P')
>> True
str.startswith('p')
>> False
str.endswith('ng')
>> True
str.endswith('ngo')
>> False

#strip,rstrip,lstripで空白と文字列を削除する
#関数の引数に何も指定しない場合は空白を削除
strip_str = " Python Prgraming "
strip_str.strip()
>>'Python Prgraming'#←両端の空白が削除されている
rstrip_str = " Python Prgraming "
rstrip_str.rstrip()
>>' Python Prgraming'#←右端の空白が削除されている
lstrip_str = " Python Prgraming "
lstrip_str.lstrip()
>>'Python Prgraming '#←左端の空白が削除されている
#引数に文字列を指定した場合は端のその文字を削除
str = "Python Prgraming"
str.strip("P")
>>'ython Prgraming'

#lenで文字列の長さをカウント
len(str)
>>16

#upper,lower,swapcaseで文字列内の大文字小文字に変換
#upperは全ての文字を大文字にする
str.upper()
>>'PYTHON PRGRAMING'
#lowerは全ての文字を大文字にする
str.lower()
>>'python prgraming'
#swapcaseは全ての文字列の大文字小文字を逆にする
str.swapcase()
>>'pYTHON pRGRAMING'

#replaceで文字列内の文字を任意の文字に入れ替える
str.replace("P","X")
>>'Xython Xrgraming'

#capitalizeで最初の文字だけを大文字に変換
c_str = "python Programing"
c_str.capitalize()
>>'Python programing'

#islower,isupperで文字列が全て大文字か小文字かどうかを判定する
capital = "APPLE"
capital.isupper()
>>False
capital = "APPLe"
capital.isupper()
>>False
lowercase = "apple"
lowercase.islower()
>> True
lowercase = "Apple"
lowercase.islower()
>>False

#find,rfindで目的の文字列が存在するかどうかを確認する
#findは左端から検索する
str.find("n")
>>5
#rfindは右端から検索する
str.rfind("n")
>>14
#findとrfindは引数の文字列が存在しない場合、-1を返す
str.find("j")
>>-1
str.rfind("j")
>>-1

#index,rindexでで目的の文字列が存在するかどうかを確認する
#indexは左端から検索する
str.index("n")
>>5
rfindは右端から検索する
str.rindex("n")
>>14
#indexとrindexは引数の文字列が存在しない場合、エラーを返す
str.index("k")
----> 1 str.index("k")

ValueError: substring not found

str.rindex("k")
----> 1 str.rindex("k")

ValueError: substring not found

参考資料

この記事ではUdemyのPython+FlaskでのWebアプリケーション開発講座!!~0からFlaskをマスターしてSNSを作成する~という講座と現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイルという2つの講座を参考にさせていただきました。

Python+FlaskでのWebアプリケーション開発講座!!~0からFlaskをマスターしてSNSを作成する~

Udemyより抜粋

当講座は最低限のWeb開発の知識を知っていることが前提とはなりますが、とにかくPythonの説明とFlask開発の為の説明が充実しているのでおすすめです。
28時間に及ぶ長丁場の講座にはなりますが、絶対に聞く価値がある講座です。
これをマスターすればPythonでどんなアプリケーションでも作ることができると思います。

当講座のおすすめポイントを以下にまとめておきます。

当講座のおすすめポイント

とにかく説明が充実している

Webアプリ開発におけるフレームワークがなぜ有益なのか知ることができる

セキュリティ対策、Ajaxなどの技術も知れる

現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイル

画像に alt 属性が指定されていません。ファイル名: a1ee3d048d6aa860662b6f58c4aa167f-1024x328.png

当講座はPythonの基礎から応用まで幅広く学べる講座なのでおすすめです。
この講座の講師はとにかくPythonについての知識が豊富ですし、話も適度な速さで聞き取りやすいです。さすがのシリコンバレーです。
また、最後の方に機械学習で使うライブラリについても解説があるので、データサイエンス・AIについても多少知ることができます。

当講座のおすすめポイントを以下にまとめておきます。

当講座のおすすめポイント

シリコンバレーで働いているということもあり、講師のPythonの知識が豊富

話も適度な速さで聞き取りやすい

コードの意味だけでなく、それをどう応用するかまで解説してくれる

なお、Udemyについては以下の記事でまとめていますのでご参考ください。

まとめ

ということで、今回はPythonの文字列型の宣言・操作とメソッドを解説しました。
文字列の操作はプログラミングをする上でよく出てくるテーマなので、ぜひ押さえていただければと思います。
では、今回はここまでとさせていただきます。