Python
文字列
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

文字列の結合

2つの文字列の結合して,1つの文字列にするとき,「+」を使います.
joinメソッドとリスト/タプルを使って連結するテクニックもありますね。
また,同じ内容を繰り返す場合は*演算子で整数を与えると指定した回数だけリピートした文字列が生成されます。
使用方法は次のプログラムを見てください.

moji_02.py
word1 = "Gu"
word2 = "est"

## 「+」使用
print(word1+word2) ## => Guest

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

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

文字列の分割

指定の文字列に対して,区切り文字で分割したリストを返します.
分割数はオプションで,分割する回数を制限できます.分割数は省略することができます.
splitは左から分割を行うことができます.また,rsplitは右から分割することができます.
使用方法は次のプログラムを見てください.

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

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

文字列の切り出し

文字列オブジェクト[開始インデックス:終了インデックス]開始インデックスと終了インデックスをコロン(:)でつなげて指定します.
使用方法は次のプログラムを見てください.

moji_04.py
str = "ABCDE"
print(str[1:3]) ## => BC
print(str[2:]) ## => CDE
print(str[:3]) ## => ABCD
print(str[:]) ## => ABCDE

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

文字列の置換

.replace(置換される文字列, 置換する文字列, 置換回数)を使用すると,指定の文字列を置換することができます.
置換回数はオプションで,置換する回数を指定できます.置換回数を指定しない場合は,全て置換されます.
使用方法は次のプログラムを見てください.

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

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

文字列の削除

.strip(削除する文字列)を使用すると,文字列から特定の文字を削除できます.
stripは両端.他に,lstripは左端,rstripは右端の文字列を削除します.
使用方法は次のプログラムを見てください.

moji_06.py
str = "ABCABCA"
## stripで両端の削除
print(str.strip("A")) ## => BCABCA

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

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

文字列の検索

検索する文字列 in 検索対象の文字列を使用すると,指定の文字列が含まれているかを調べることができます.
検索対象の文字列の中に,検索する文字列が存在すれば,True.存在しないならば,False.
使用方法は次のプログラムを見てください.

moji_07.py
str = "ABCABCA"
## 存在する場合
print("ABC" in str) ## => True

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

上の方法以外は,.find(検索する文字列, 開始位置, 終了位置)を使う方法もあります.こちらの方がよく使われます.
findは文字列の左端から検索するのに対し,rfindは文字列の右端から検索します.
こちらの方は,開始位置と終了位置を指定することによって,検索範囲を指定することができます.
使用方法は次のプログラムを見てください.

moji_07.py
str = "ABCABCA"
## find
print(str.find("A")) ## => 0
print(str.find("B",2, 6)) ## => 4

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

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

その他

文字列がXXだけであるか

moji_08.py
str = "ABCabc"
## 英数字だけか 「.isalnum」
print(str.isalnum()) ## => True

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

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

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

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

moji_09.py
str = "ABCabc"
## 全て大文字にする 「.upper」
print(str.upper()) ## => ABCABC

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

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

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

幅寄せ

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

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

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

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

文字列の先頭または末尾がXXであるかを調べる

moji_11.py
str = "ABCabc"
## Aで始まるかを調べる
print(str.startswith()) ## => True

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

参考サイト

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