Edited at

Python3の文字列操作

今回はPython3に置いての簡単な文字列操作について紹介したいと思います.

まず,文字列は「"(ダブルクォーテーション)」もしくは「'(シングルクォーテーション)」で囲んで表現しています.

例えば「Hello World」を表示したい場合(今回はメッセージを変数msgに入れます)はmsg = "Hello World"と書き換えて表示します.また,メッセージを表示するためにprintを使います.それから文字列の中では特殊文字を使うことができて,いくつかあるのですが「\n」で改行,「\t」がタブになります.


文字列に値を埋め込み

埋め込みを大きく分けて2つの方法があります.

まず1つ目の方法ですが,次のmoji_01.pyを見てください.

まず埋め込みたい値を文字列の中で「%」付きで表現していきます.

そのとき,値が入れたい場合は「%s」,浮動小数点数の場合は「%f」,整数の場合は「%d」を使います.

その後に「%」と書いてあげて,埋め込みたい値をこのように書いてあげればOKです.

2つ目の方法は,「%」の部分を {0},{1} としてあげて,その後に .format(name, score) と書いてあげます.こちらの 0 番目の要素が {0} に, 1 番目の要素が {1} に埋め込まれます.

使用方法は次のプログラムを見てください.


moji_01.py

name = "guest"

score = 52.8

# 1つ目の方法
print("name: %s, score: %f" % (name, score))
## => name: guest, score: 52.800000

# 2つ目の方法
print("name: {0}, score: {1}".format(name, score))
# => name: guest, score: 52.8

# 中身省略してもOK,そのときformatの中の順番で代入される
print("name:{},score:{}".format(name, score))
## => name: guest, score: 52.8



文字列の結合

2つの文字列の結合して,1つの文字列にするとき,「+」を使います.

joinメソッドとリスト/タプルを使って連結するテクニックもあります.

また,同じ内容を繰り返す場合は*演算子で整数を与えると指定した回数だけリピートした文字列が生成されます.

使用方法は次のプログラムを見てください.


moji_02.py

word_1 = "Gu"

word_2 = "est"

# 「+」使用
print(word_1 + word_2) ## => Guest

# 「join」使用
words = ["Hello", "World", "!"]
print(" ".join(words)) ## => Hello World !

# 「*」使用
word_3 = "Hello "
print(word_3 * 3) ## => Hello Hello Hello



文字列の分割

指定の文字列に対して,区切り文字で分割したリストを返します.

分割数はオプションで,分割する回数を制限できます.分割数は省略することができます.

splitは左から分割を行うことができます.また,rsplitは右から分割することができます.

使用方法は次のプログラムを見てください.


moji_03.py

phrase = "If you can dream it you can do it"

# 「split」使用 .split(区切り文字, 分割数)
print(phrase.split()) ## => ["If","you","can","dream","it","you","can","do","it"]

word = "HelloWorld"
# 「rsplit」使用 .rsplit(区切り文字, 分割数)
print(word.rsplit("l",1)) ## => ['HelloWor', 'd']


文字列の切り出し

文字列オブジェクト[開始インデックス:終了インデックス]開始インデックスと終了インデックスをコロン(:)でつなげて指定します.

使用方法は次のプログラムを見てください.


moji_04.py

word = "ABCDE"

print(word[1:3]) ## => BC
print(word[2:]) ## => CDE
print(word[:3]) ## => ABC
print(word[:]) ## => ABCDE

また,開始インデックスや終了インデックスをマイナス「-」つけることができます.ぜひ試してみて下さい.


文字列の置換

.replace(置換される文字列, 置換する文字列, 置換回数)を使用すると,指定の文字列を置換することができます.

置換回数はオプションで,置換する回数を指定できます.置換回数を指定しない場合は,全て置換されます.

使用方法は次のプログラムを見てください.


moji_05.py

word = "ABCABCABC"

# 指定文字列を置換する
print(word.replace("ABC", "X")) ## => XXX

# 置換回数を1回にして指定文字列を置換する
print(word.replace("ABC", "X", 1)) ## => XABCABC


文字列の削除

.strip(削除する文字列)を使用すると,文字列から特定の文字を削除できます.

stripは両端.他に,lstripは左端,rstripは右端の文字列を削除します.

使用方法は次のプログラムを見てください.


moji_06.py

word = "ABCABCA"

# stripで両端の削除
print(word.strip("A")) ## => BCABC

# lstripで左端の削除
print(word.lstrip("A")) ## => BCABCA

# rstripで右端の削除
print(word.rstrip("A")) ## => ABCABC


文字列の検索

検索する文字列 in 検索対象の文字列を使用すると,指定の文字列が含まれているかを調べることができます.

検索対象の文字列の中に,検索する文字列が存在すれば,True.存在しないならば,False.

使用方法は次のプログラムを見てください.


moji_07.py

word = "ABCABCA"

# 存在する場合
print("ABC" in word) ## => True

# 存在しない場合
print("E" in word) ## => False

上の方法以外は,.find(検索する文字列, 開始位置, 終了位置)を使う方法もあります.こちらの方がよく使われます.

findは文字列の左端から検索するのに対し,rfindは文字列の右端から検索します.

こちらの方は,開始位置と終了位置を指定することによって,検索範囲を指定することができます.

使用方法は次のプログラムを見てください.


moji_07.py

word = "ABCABCA"

# find
print(word.find("A")) ## => 0
print(word.find("B",2, 6)) ## => 4

# rfind
print(word.rfind("A")) ## => 6
print(word.find("B",2, 6)) ## => 6

# 検索した文字列が見つからない場合
print(word.find("D")) ## => -1


文字列比較(==演算子とis演算子)

文字列同士の比較に"=="という比較演算子を使用し,左右の文字列が一致する場合はTrue,異なる場合はFalseを返します.

文字列同士が異なる場合にTrueを返したい場合は,"!="という比較演算子を使います.

文字列の比較演算子として"=="の他にis演算子があります.

※ 文字列が同じ値かどうかを調べる場合は"=="を使い,is演算子は使用しないようにしましょう.

is演算子の利用が推奨される場面はNoneと比較する場合です.

メリットとして"=="と比べてis演算子の方が比較処理の速度が早いです.


moji_08.py

word = "abcd"

# 一致する場合
print(word == "abcd") ## => True

# 異なる場合
print(word == "abce") ## => False


幅寄せ


moji_09.py

word = "ABCabc"

# 左寄せ 「.ljust」
print(word.ljust(10)) ## => "ABCabc "

# 右寄せ 「.rjust」
print(word.rjust(10)) ## => " ABCabc"

# 中央寄せ 「.center」
print(word.center(10)) ## => " ABCabc "

# 0で埋めて左寄せ 「.zfill」
print(word.zfill(10)) ## => "0000ABCabc"


大文字と小文字の置き換え


moji_10.py

word = "ABCabc"

# 全て大文字にする 「.upper」
print(word.upper()) ## => ABCABC

# 全て小文字にする 「.lower」
print(word.lower()) ## => abcabc

# 大文字と小文字を入れ替える 「.swapcase」
print(word.swapcase()) ## => abcABC

# 先頭を大文字、その他を小文字にする 「.capitalize」
print(word.capitalize()) ## => Abcabc


文字列が特定な文字だけであるか


moji_11.py

word = "ABCabc"

# 英数字だけか 「.isalnum」
print(word.isalnum()) ## => True

# 英字だけか 「.isalpha」
print(word.isalpha()) ## => True

# 数字だけか 「.isdigit」
print("123".isspace()) ## => True
print(word.isdigit()) ## => False

# 空白文字だけか 「.isspace」
print(" \n\t\r".isspace()) ## => True
print(word.isspace()) ## => False


文字列の先頭または末尾が特定な文字であるか


moji_12.py

word = "ABCabc"

# Aで始まるかを調べる
print(word.startswith("A")) ## => True

# Aで終わるかを調べる
print(word.endswith("A")) ## => False


参考サイト

ひきメモ: http://d.hatena.ne.jp/yumimue/20071223/1198407682