pythonの文字列
python3での文字列の操作など
・シーケンス型の1つ。
・シングルクオーテーション('abc')、ダブルクオーテーション("abc")のどちらでも。
・シングルクオーテーションの中では「"」は文字として扱える。逆も。
・immutableなのでs[2]="a"のような代入はできない。
置換、切断、リスト化などで対応する。
・文字数はlen(str)
○基本
s = abc #NameErroe: name 'abc' is not defined s = "abc" type(s) #class 'str' len(s) #6 list(s) #["p", "y", "t", "h", "o", "n"] s[2] = "a" #error:'str' object does not support item assignment
○連結・繰り返し・結合
"abc" + "123" #'abc123' "ab" "12" #'ab12' リテラルどうしは+演算子不要 "I"*4 #'IIII' list1 = ["12", "ab", "XY"] "-".join(list1) #'12-ab-XY'
○数値を文字列型に直す
a = 123 #int型の123 str(a) #'123' "{0:05d}".format(456) #'00456' 左に0を埋めて5桁の整数で。
○インデックス指定ができる。
s = "python" s[0] #'p' s[2] #'t' s[-1] #'n'
○スライスが利用できる。
s = "python" s[0:2] #'py' s[0:] #'python' s[:-1] #'pytho' s[:] #'python' s[0:5:2] #'pto' s[::-1] #'nohtyp' s[3:30] # hon
○置換
・replaceメソッド 置換前後の文字列を指定。
・translateメソッド 置換前後の文字を辞書型で指定。削除も同時に。
・lower()メソッド 小文字に置換
・upper()メソッド 大文字に置換
・swapcase()メソッド 大文字と小文字を入れ替える。
・capitalize()メソッド 文の先頭を大文字にする。
・title()メソッド それぞれの単語の先頭を大文字にする。
print("I am Python.".replace("am", "love")) # I love Python. dic={ord("a"):ord("x")} print("abcd".translate(dic)) # xbcd dic2 = str.maketrans("0123456789", "0123456789") print("123".translate(dic2)) # 123 print("aBcD".lower()) # abcd print("aBcD".upper()) # ABCD print("one two".capitalize()) # One two print("one two".title()) # One Two print("IoT".swapcase()) # iOt print("Iot".swapcase().swapcase()) # IoT s1 = "red" s2 = s1.swapcase().swapcase() print(s1 == s2) # True print(s1 is s2) # False 別オブジェクト(別アドレス)
○削除、分割 詳しくは文字列の削除
・strip() 両端の指定文字を削除
・split() 指定文字で区切ったリストを返す。指定文字は削除。
・replace() 置換後の文字を空文字にすると削除
・translate() 第3引数に削除したい文字を渡す
・re.sub() 正規表現モジュールを利用する
・splitines() 改行文字で区切ったリストを返す。改行文字は削除。
○検索
・in 存在すればTrue
・find()メソッド 位置を返す。ないとき-1、複数あるとき1つめ。
開始位置、終了位置オプションあり。
・rfind()メソッド 右側から検索
・index()メソッド 位置を返す。存在しないとValueError
・count()メソッド 含まれている回数をカウントする。
"on" in "python" #True "to" in "python" #False "python".find("y") #1 "abcabc".rfind("c") #5 右から検索し、左から数えたindexを返す "python".index("y") #1 "python".find("y", 3)#-1 3文字目以降には"y"なし。 "python".find("x") #-1 "python".index("x") #ValueError: substring not found "abcabc".count("ab") #2
○判断
islower() | 大小文字の区別がある文字がすべて小文字 |
isupper() | 大小文字の区別がある文字がすべて大文字 |
isalpha() | すべてが英字かつ1文字以上ならTrue |
isalnum() | すべてが英数字かつ1文字以上ならTrue |
isdecimal() | 数字か(半角数字0~9、全角数字0~9) |
isnumeric() | 数字か(半角数字0~9、全角数字0~9、ローマ数字、漢数字) |
float(string) | ValueErrorにならなければ、stringは数値を表す文字列 |
zfill() | ゼロ埋め |
startwith(s) | 文字列の先頭がsと同じか。startオプションあり |
endwith(s) | 文字列の末尾がsと同じか。startオプションあり |
○format 書式設定ミニ言語
#位置の指定は番号または、キーワード引数 "{0}は{1}の{2}".format("今日", "母", "日") #'今日は母の日' "{}は{}の{}".format("今日", "母", "日") #'今日は母の日' "{0}{1}{0}".format("日", "曜") #'日曜日' "{0}{1}{0}".format(*"日曜") #アンパックしてから。 "x座標は{x}, 半径は{r}".format(r=10, x=5) #'x座標は5, 半径は10' #型 s文字列(デフォ) d数字 b2進数 x16進数 X16進数大文字 f小数 "{:d}".format(3) #'3' "{:4d}".format(3) #' 3' 右寄せ4桁 "{:>4d}".format(3) #' 3' 右寄せ4桁 "{:<4d}".format(3) #'3 ' 左寄せ4桁 "{:^4d}".format(3) #' 3 ' 中央寄せ4桁 "{:04d}".format(3) #'0003' ゼロ埋め "3".zfill(4) #'0003' ゼロ埋め "{:*^5d}".format(3) #'**3**' アスタリスク埋め "{:,}".format(1234) #'1,234' カンマ入れ "{:f}".format(3) #'3.000000' 小数 "{:.2f}".format(3) #'3.00' 小数点以下2位まで "{:.2f}".format(3.456) #'3.46' 四捨五入 "{:+.2f}".format(3) #'+3.00' 符号を必ず表示 "{:-.2f}".format(3) #'3.00' 負の数だけ符号を表示 "{: .2f}".format(3) #' 3.00' 正の数はスペースをあける "{:,.2f}".format(1234) #'+1,234.00'
python3.6からはf文字列として、さらに進んだ文字列フォーマットがもっと手軽に。
式を評価してくれたり、変数名をそのまま使えたり。
エスケープシーケンス
\n | 改行 |
\r | 改行 |
\t | 水平タブ |
\\ | バックスラッシュ |
\f | 改ページ |
\' | シングルクオーテーション |
\" | ダブルクオーテーション |