1. ホーム 
  2. 備忘録 
  3. Python

文字列

文字列について

Pythonで文字列を取り扱う方法について以下に記載する


# シングルクォーテーション または ダブルクォーテーションで囲むことで
# 文字列を表現することができる
# 特にどちらを使っても問題ない
print('hello')
print("hello")

# 間にシングルクォーテーションが入るときはダブルクォーテーションで囲う
# もしくはバックスラッシュでエスケープを行う
print("I don't know")
print('I don\'t know')

# 改行文字
print('こんにちは。\nお名前を教えてください。')

# ディレクトリパスやURLなど"生(raw)"のデータを扱いたい場合
# 例:↓はrawデータとして取り扱わない場合 \n が改行として認識される
print(r'C:\name\name')

# 複数行に跨る文章
# """で囲うことで改行コードなしに複数行の文字列を設定することができる
# 文頭・文末の \ がない場合、空白行が入ってしまうことに注意する
print("""\
line1
line2
line3\
""")
# 結果
# line1
# line2
# line3

# 文字列に足し算や掛け算も可能
print('ねる' * 3 + 'ね')
# 結果
# ねるねるねるね

# 変数に格納していなければ、演算子なしで足し算ができる
long_str = ('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
            'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb')
print(long_str)
# 結果
# aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb

# こういうケースはエラーが出て実行できない
# error_case = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
# error_str = (error_case 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb')
# ↓のように足し算ならok
# ok_str = (error_case + 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb')

文字列の操作

文字列の各要素は配列のようにインデックスでアクセスすることができる


s = 'My name is Mike. Hi Mike.'

# 文字列のインデックス
print(s[0])     # M
print(s[1])     # y
print(s[-1])    # .
print(s[3:7])   # name
print(s[:2])    # My
print(s[3:])    # name is Mike. Hi Mike.

# 文字列の一部を置き換えることはできない
# s[0] = 'M'    # TypeError: 'str' object does not support item assignment
# 同じことをするなら下記のように元の文字列ごと置き換える
s = 'B' + s[1:]
print(s)        # By name is Mike. Hi Mike.

また、文字列型からは文字列の判定や操作に役立つ様々なメソッドを呼び出すことができる

以下にいくつかのメソッドの例を記載する


s = 'My name is Mike. Hi Mike.'

# 文字列の中身の先頭の文字が指定のワードで始まっているか
is_start = s.startswith('My')
print(is_start)     # True

# 前から探して何番目(0スタート)に指定のワードが含まれているか
print(s.find('Mike'))   # 11
# 後ろから探して何番目(0スタート)に指定のワードが含まれているか
print(s.rfind('Mike'))  # 20
# 指定のワードが何個含まれているか
print(s.count('Mike'))  # 2

# 先頭の文字を大文字にして、あとは小文字にする
print(s.capitalize())   # My name is mike. hi mike.
# 単語の先頭の文字を大文字にする
print(s.title())    # My Name Is Mike. Hi Mike.
# 全て大文字
print(s.upper())    # MY NAME IS MIKE. HI MIKE.
# 全て小文字
print(s.lower())    # my name is mike. hi mike.
# 指定したワードの置き換え
print(s.replace('Mike', 'Nancy'))   # My name is Nancy. Hi Nancy.

文字列の代入

文字列の代入は Python3.6 以降は f-strings が高速且つ便利である


### 文字列の代入
a = 'a'
print(f'a is {a}')  # a is a

x, y, z = 1, 2, 3
print(f'a is {x}, {y}, {z}')    # a is 1, 2, 3
print(f'a is {z}, {y}, {x}')    # a is 3, 2, 1

name = 'Tarou'
family = 'Yamada'
print(f'My name is {name} {family}. Watashi ha {family} {name}')
# My name is Tarou Yamada. Watashi ha Yamada Tarou

Python3.6 より前では format を使った代入が一般的である


### 文字列の代入
# {} のみの場合は順番に代入する。超過したパラメタは無視される
s = 'My name is {} {}'
print(s.format('Tarou', 'Yamada'))  # My name is Tarou Yamada

# {} の中に番号をふることで代入する順番を制御できる
s = 'My name is {1} {0}'
print(s.format('Suzuki', 'Hideo'))  # My name is Hideo Suzuki

# {} の中に名前をつけることで代入する場所を指定できる
s = 'My name is {name} {family}'
print(s.format(family='Tanaka', name='Hanako')) # My name is Hanako Tanaka

文字列への型変換

他の型の値を文字列へ変換する方法は下記のとおりである


### 文字列の変換
num = 123
float_num = 3.14
isStr = True
str_num = str(num)
str_float_num = str(float_num)
str_bool = str(isStr)
print(str_num, type(str_num))   # 123 <class 'str'>
print(str_float_num, type(str_float_num))   # 123 <class 'str'>
print(str_bool, type(str_bool))   # True <class 'str'>