Help us understand the problem. What is going on with this article?

Python #文字列型

学習メモ、備忘録

文字列型

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---'
ktr_gun
情報系大学生の勉強用メモ・備忘録
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした