Remrinのpython攻略日記

python3に入門しました。python3についてあれこれとサンプルコードとか。

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 改ページ
\' シングルクオーテーション
\" ダブルクオーテーション

 
参考:
Python 3.6の概要 (その1 - f文字列) - atsuoishimoto's diary