学習メモ、備忘録
#文字列型
str
クラスのインスタンスとして生成される。文字と文字列の区別はない。
基本的なメソッド
文字列型が備えている基本的なメソッド
a = ' Hello, World \n'
b = a.strip() # 前後の空白削除
c = b.lower() # 小文字に変換
d = b.upper() # 大文字に変換
e = b.swapcase() # 大文字小文字を反転
f = b.title() # 単語の先頭文字だけ大文字に変換
g = b.split(' ') # 区切り文字を指定してリストに分割
h = b.splitlines() # 改行で区切りリストに分割
メモリ効率を考慮した文字列の作成
ファアイルからテキストデータを読み込み、そのデータをstr
インスタンスとして保存したいときなど、ループによって複数回の文字列の追加作業が発生するときには注意する。
#####ダメな例
text = ''
with open('test.txt') as f:
temp = f.readline()
while temp:
text += temp
temp = f.readline()
この記述の仕方ではループ一回ごとに、一行分のメモリ確保・一つ前まで使用していたメモリと新しく読み込んだ分のメモリを新しく確保・一つ前まで使用していた古いメモリの解放といった処理を行うことになるので、非常にメモリ効率が悪く、処理速度も遅くなる。
#####正しい例
list = []
with open('test.txt') as f:
temp = f.readline()
while temp:
list.append(temp)
temp = f.readline()
text = ``.join(list)
メモリ効率を損なわないようにするには、一旦リストとして保存して後から結合すうるという方法を取れば良い。
join
メソッドを用いることで、区切りとなる文字を指定してリストの内容の結合ができる。
文字列の検索
startswith()
: 文字列が引数で指定する文字列から始まっているかどうか
endswith()
: 文字列が引数で指定する文字列で終わっているかどうか
find()
: 引数で指定した文字列のインデックスを取得、見つからなかったら−1
index()
: 引数で指定した文字列のインデックスを取得、見つからなかったらValueError
in
演算子を用いて含んでいるか否かの判定も行える。
count()
: 引数で指定した文字列が登場する回数を数える。
文字列の置換
replace()
: 一つ目の引数で指定した文字列を二つ目の引数で指定した文字列で置換する、対象の文字列が複数存在する場合も全てが置換される
正規表現
-
re
パッケージに存在するメソッド -
re.match()
: 文字列の先頭部分が引数で指定した文字列とマッチする場合は、match()
クラスを返し、マッチしない場合はNone
を返す。
re.match().span()
で、マッチした場所を取得できる。 -
re.search()
: 引数で指定した文字列とマッチする場合は、match()
クラスを返し、マッチしない場合はNone
を返す。
re.search().span()
で、マッチした場所を取得できる。 - 正規表現を繰り返し用いる場合は
compile()
メソッドを用いてあらかじめコンパイルしておくと良い -
findall()
: マッチする文字列を全て取得しリストとして保存する。
+
は一回以上の繰り返し、*
は0回以上の繰り返しを表す。
外部変数による置換
文字列の前にf
またはF
をつけることで、{}
で囲まれた部分は外部変数や計算式で置換されるフィールドになる。
a = 'World'
b = f'Hello, {a}'
print(b)
c = 10
d = 20
e = F'{c} + {d} = {c+d}'
print(e)
実行結果
Hello, World
10 + 20 = 30
フォーマットの指定
format()
メソッドは、引数で{}
フィールド内のインデックスや変数を置換する。
a = '{0} is {1}'
b = a.format('apple', 'red')
print(b)
c = '{fruits} is {color}'
d = c.format(fruits = 'melon', color = 'green')
print(d)
実行結果
apple is red
melon is green
右寄せ・左寄せ・中央寄せ
:
の後に指定する文字列で埋めて文字列を寄せる。
a = 'Title'
b = '{:<10}'.format(a) # 'Title '
c = '{:>10}'.format(a) # ' Title'
d = '{:-^10}'.format(a) # '--Title---'