Python入門:文字列操作
文字列操作
Pythonは、文字列を操作するためのメソッドや機能が豊富に揃っています。
この記事では、Pythonでの基本的な文字列の操作方法を解説しています。
文字列はイテラブル
Pythonでは、文字列はイテラブルとして扱われています。そのため、文字列はfor文を使うことで、一文字ずつ抜き出して処理を行うことができます。
#一文字ずつ出力するプログラム
text = "おはようございます"
for char in text :
print(char)
お
は
よ
う
ご
ざ
い
ま
す
上のコードでは、for文を使って文字列を一文字ずつ変数charで取得して出力しています。
#文字の中の"a"の数を数えるプログラム
text = "asdfafda"
acount = 0
for char in text :
if char == "a":
acount += 1
print("文字列textにはaが{acount}字あります。")
文字列textにはaが3字あります。
上のコードでは、変数charが"a"と等しければ変数acountを一つずつ増やすことで、変数textに含まれる"a"の字数をを数えています。
Pythonでは、文字列のインデックスを指定して、特定の文字を取り出すことができます。
#インデックスを指定して特定の文字を出力するプログラム
text = "abcde"
print(text[0])
print(text[2])
print(text[4])
a
c
e
文字列はリストやタプルのように[]の中にインデックスを指定することができます。
また、文字列にスライス操作をすることで、部分文字列を取得できます。
#開始インデックス、終了インデックスを指定して文字列をスライスするプログラム
text = "abcde"
print(text[0:2])
print(text[3:5])
ab
de
[]の中に開始インデックスと終了インデックスをコロン(:)で区切って入れることで、文字列をスライスすることができます。
文字列のメソッド
これまで説明した内容を利用すれば、文字列操作を自由自在に行うことができます。また、Pythonではstr型に備わっているメソッドが豊富に揃っています。
・replaceメソッド
replaceメソッドは、文字列の一部を引数に置き換えて、返します。
text = "今日の日直はトムくん"
text = text.replace("今日","明日") #今日を明日に変換
text = text.replace("トムくん","チャーリーくん") #トムくんをチャーリーくんに変換
print(text)
明日の日直はチャーリーくん
replaceメソッドは、第一引数に置き換えてなくなる文字列、第二引数に置き換えて新しく入れられる文字列を指定します。
print("give me give me give me".replace("me","you"))
print("give me give me give me".replace("me","you",2))
give you give you give you
give you give you give me
第三引数に何個置き換えるか指定できます。また、第三引数を指定しない場合は、すべて置き換わります。
・findメソッドfindメソッドは、文字列の中に引数の文字列が見つかれば、見つけた場所のインデックスを返します。
text = "abcdefg"
print(text.find("a"))
print(text.find("def"))
print(text.find("ssr"))
0
3
-1
もし、文字列の中に引数の文字列が見つからなかった場合は、-1を返します。
・stripメソッド
stripメソッドは、文字列の両端にあるスペース、タブ文字、改行を削除します。
text = " abcdefg\t"
print("F"+text+"E")
print("F"+text.strip()+"E")
text = " abcdefg "
print("F"+text+"E")
print("F"+text.strip()+"E")
F abcdefg E
FabcdefgE
F abcdefg E
FabcdefgE
文字列の片方のみを削除したい場合は、rstripメソッド、lspritメソッドを使います。
text = " center "
print("left" + text.rstrip() + "right")
print("left" + text.lstrip() + "right")
left centerright
leftcenter right
・splitメソッド
splitメソッドは、文字列をスペース、タブ文字、改行で分割し、リストを生成します。
text = "リンゴ ゴリラ ラッカセイ"
print(text.split())
text = "リンゴ\nゴリラ\nラッカセイ"
print(text.split())
text = "リンゴ\tゴリラ\tラッカセイ"
print(text.split())
['リンゴ', 'ゴリラ', 'ラッカセイ']
['リンゴ', 'ゴリラ', 'ラッカセイ']
['リンゴ', 'ゴリラ', 'ラッカセイ']
また、splitメソッドは引数を指定することで、分割する文字を指定することができます。
text = "リンゴ/ゴリラ/ラッカセイ"
print(text.split("/"))
text = "リンゴdividゴリラdividラッカセイ"
print(text.split("divid"))
['リンゴ', 'ゴリラ', 'ラッカセイ']
['リンゴ', 'ゴリラ', 'ラッカセイ']
splitメソッドとは逆に、リストから文字を作るメソッドがjoinメソッドです。
list=["リンゴ","ゴリラ","ラッカセイ"] #リストの要素はstr関数である必要がある。
print("".join(list))
print("/".join(list))
リンゴゴリララッカセイ
リンゴ/ゴリラ/ラッカセイ
上のコードのように、連結するとき各要素の間に入る文字列からjoinメソッドが使われています。
・upper、lowerメソッド
upperメソッドは文字列を大文字に変換します。lowerメソッドは文字列を小文字に変換します。
print("oomozi".upper())
print("Oomozi".upper())
print("KOMZI".lower())
print("Komozi".lower())
OOMOZI
OOMOZI
komzi
komozi
また、大文字か小文字か判定したい場合は、isupperメソッド、islowerメソッドを使います。
print("OOMOZI".isupper())
print("Oomozi".isupper())
print("komozi".islower())
print("Komozi".islower())
True
False
True
False
練習問題
では、これまでの内容をもとに次のプログラムを作ってみましょう!
- <>を含む文字列が入力されると、<>の中身を出力するプログラム
例:これは<文字列>です。→文字列、
:<カッコ>は<2つ>あります。→カッコ、2つ、 - 英語が入力されると、大文字は小文字、小文字は大文字に変換して出力するプログラム
例:AEMtech→armTECH
解答例※あくまで一例です。
(1)
text = input("文字列を入力してください>>")
newtext = "" #空欄の文字列の変数newtextを宣言
scan = False #真偽値Falseの変数scanを宣言
for char in text : #一文字ずつ変数charに代入する
if char == "<" :
scan = True #<と変数charが等しければ変数scanはTrue
elif char == ">" :
scan = False #>と変数charが等しければ変数scanはFalse
newtext += "、"
elif scan : #変数scanがTrueかつ変数charが"<"や">"出でないときに変数newtextに変数charを追加する
newtext += char
print(newtext)
文字列を入力してください>>これは<文字列>です。
文字列、
文字列を入力してください>><カッコ>は<2つ>あります。
カッコ、2つ、
(2)
text = input("英語の文字列を入力してください>>")
newText = ""
for char in text : #一文字ずつ変数charに代入する
if char.isupper() :
newText += char.lower() #大文字なら小文字に変換
else :
newText += char.upper() #小文字なら大文字に変換
print(newText)
英語の文字列を入力してください>>ARMtech
armTECH
英語の文字列を入力してください>>QwRe
qWrE
最後に
この記事では、Pythonでの文字列捜査について解説しました。 もっとPythonを学びたい!という方はこちらの記事でPythonの基本的な構文を学習することが出来ますのでぜひ立ち寄ってみてください!