Python で文字列を扱う方法について解説します。文字列を記述する方法や、文字列に関する便利な関数の使い方を紹介します。
文字列の基礎
文字列を記述する場合、文字をダブルクオーテーション(“)で囲うかシングルクオーテーション(‘)で囲います。
‘文字列’
文字列をprint
関数の引数に指定して出力することができます。
1 2 3 4 5 6 | print('Hello Python') # Hello Python str_temp = 'python-work' print(str_temp) # python-work |
文字列の連結(+演算子)
文字列の連結は+演算子を使用します。
1 2 3 4 5 6 | str1 = 'ABC' str2 = 'DEF' str_temp = str1 + str2 print(str_temp) # ABCDEF |
+=演算子を使用することもできます。左辺の文字列変数に右辺の文字列が連結され、代入・更新されます。
1 2 3 | str1 += str2 print(str1) # ABCDEF |
*演算子を使うと指定回数繰り返すことができます。
1 2 3 | str_temp = '123' * 3 print(str_temp) # 123123123 |
文字列リストの連結(join)
文字列のリストを連結するには、join()
を使います。引数に文字列リストを指定します。
1 2 3 4 5 6 7 8 | list = ['abc', 'def', 'ghi'] str_temp = ''.join(list) print(str_temp) #abcdefghi str_temp = '-'.join(list) print(str_temp) #abc-def-ghi |
文字列に変換(str)
文字列へ変換を行うにはstr()
を使用します。
1 2 3 | year = 2021 'Happy new year ' + str(year) # Happy new year 2021 |
文字列の置換(replace)
文字列の置換はreplace()
を使用します。第一引数に置換元の文字列、第二引数に置換後の文字列を指定します。第三引数は省略可能で、置換を行う最大回数を指定することができます。
1 2 3 | str_temp = 'Happy new year 2021' str_temp.replace('2021','2022') # Happy new year 2022 |
第三引数に置換を行う最大回数を指定してみます。
1 2 3 | str_temp = '111 py 222 py 333 py 444 py' str_temp.replace('py', '-', 2) # 111 - 222 - 333 py 444 py |
文字列の分割(split)
文字列の分割はsplit()
を使用します。引数で区切り文字を指定しますが、半角スペースの場合は区切り文字の指定は不要です。戻り値はリスト型になります。
1 2 3 4 5 6 7 | str_temp = 'Happy new year 2022' str_temp.split() # ['Happy', 'new', 'year', '2022'] str_temp = 'python-work 2021' str_temp.split('-') # ['python', 'work 2021'] |
文字列の抽出
[]
にインデックスを指定するとその位置の文字を取得できる。インデックスは0から始まります。
1 2 3 4 5 6 | str_temp = 'abcdef' str_temp[0] # a str_temp[3] # d |
インデックスは負の値も指定できます。この場合一番最後の文字が-1になります。
1 2 | str_temp[-2] # e |
[開始インデックス:終了インデックス]
とすることで、開始インデックス以上・終了インデックス未満の範囲の文字列を抽出できます。この場合も負の値を指定できます。
1 2 3 4 5 6 7 8 9 10 11 12 | str_temp = 'abcdef' str_temp[1:3] # bc str_temp[1:] # bcdef str_temp[:4] # abcd str_temp[-4:-1] # cde |
大文字・小文字変換(upper, lower)
指定の文字列を大文字・小文字へ変換するにはupper()
、lower()
を使います。
文字列.lower()
1 2 3 4 5 6 | str_temp = 'Happy New Year' str_temp.upper() # HAPPY NEW YEAR str_temp.lower() # happy new year |
文字列の先頭および末尾から文字を取り除く(strip)
文字列から指定した文字を取り除くためにはstrip()
を使用します。空白を取り除く場合は引数は指定しません。指定した文字以外の文字が先頭および末尾から現れたら処理が終了します。
1 2 3 4 5 | ' Happy New Year '.strip() # Happy New Year 'www.python.com'.strip('wocm.') # python |
文字列の長さ(文字数)を取得(len)
文字列の長さ(文字数)を取得するにはlen()
を使用します。引数に文字数を調べたい文字列を指定します。
1 2 | len('Happy new year') # 14 |
エスケープシーケンス
通常の文字列では表せないタブや改行などの文字をバックスラッシュを付けたエスケープシーケンスで記述します。エスケープシーケンスについてはPython公式ドキュメントを参照してください。
以下の例では改行を示す\n
を使用しています。
1 2 3 4 | print('Hello!\nThis is Tom.\nGood bye!') # Hello! # This is Tom. # Good bye! |
エスケープシーケンスを無視するraw文字列
文字列の前にrまたはRを付けると、エスケープシーケンスを適用せずにそのままの値が文字列になる。これをraw文字列という。
1 2 | print(r'Hello!\nThis is Tom.\nGood bye!') # Hello!\nThis is Tom.\nGood bye! |
Windowsのパスを文字列で扱う場合に、raw文字列を使用すると便利です。
1 2 3 4 | sys_path = 'C:\\Windows\\system32' r_sys_path = r'C:\Windows\system32' print(sys_path == r_sys_path) # True |
文字列の書式設定(format)
format()
メソッドを使用すると、文字列の書式設定が行えます。
1 2 3 | str = 'https://{}-{}.com'.format('python', 'work') print(str) # https://python-work.com |
format()
の引数に変数を指定することも可能です。
1 2 3 4 5 | str1 = 'python' str2 = 'work' str = 'https://{}-{}.com'.format(str1, str2) print(str) # https://python-work.com |
format()
関数の引数は、書式指定文字列内の波括弧 {}
の順序と同じにする必要があります。
以下のように、引数に式を入れたり、何番目の引数を使用するかを指定することも可能です。
1 2 3 4 5 | str1 = 'python' str2 = 'work' str = '{1} is useful for {0}!'.format(str2, str1.capitalize()) print(str) # Python is helpful for work! |
format()
の引数には辞書を指定する事も可能です。
1 2 3 | d = {'city': '名古屋市', 'pref': '愛知県', 'pop': '229.6万'} print('{0[city]}は{0[pref]}にある都市で、人口は約{0[pop]}人です。'.format(d)) # 名古屋市は愛知県にある都市で、人口は約229.6万人です。 |
書式指定を行うには:(コロン)の後に書式指定子を記述します。
書式は、配置文字+文字列幅の最小長さ+type(表現型) の順に指定します。
【配置文字】<
左揃え、>
右揃え、^
中央揃え
【type】s
文字列、d
整数、f
固定小数点数 など
文字列の書式設定例
typeは s
を指定します。
1 2 3 4 5 6 7 8 | print('|{:<10s}|'.format(python)) # |python | print('|{:>10s}|'.format(python)) # | python| print('|{:^10s}|'.format(python)) # | python | |
整数値の書式設定例
typeは d
を指定します。
1 2 3 4 5 6 7 8 | print('|{:d}|'.format(10)) # |10| print('|{:<5d}|'.format(10)) # |10 | print('|{:>5d}|'.format(10)) # | 10| |
小数点を含む数値の書式設定例
typeは f
を指定します
小数点の桁数は標準では 6桁になっています。桁数を指定する場合はドット(.)のあとに桁数を指定します。
1 2 3 4 5 6 7 8 | print('|{:f}|'.format(3.14)) # |3.140000| print('|{:.2f}|'.format(3.14)) # |3.14| print('|{:>8.2f}|'.format(3.14)) # | 3.14| |
f文字列
f文字列は、Python3.6から追加された新しい書式指定の方法です。先頭のクォートの前に f
か F
を入れ、波括弧 {}
で変数名か式を囲み、その値を文字列に差し込みます。format
関数を使わず書式指定文字列の中で、空の波括弧 {}
や位置指定の波括弧 {1}
も使わないため可読性が高まります。
以下のように使用します。
1 2 3 4 | str1 = 'python' str2 = 'work' print(f'https://{str1}-{str2}.com') # https://python-work.com |
format()
と同様に、{}
内で式を使用することもできます。
1 2 3 | str = f'{str1.capitalize()} is helpful for {str2}!' print(str) # Python is useful for work! |
Python3.8以降では、変数の値だけではなく変数名も表示が可能です。式を指定して結果と合わせてを表示することも可能なため、デバッグに活用することができます。
1 2 3 4 5 | print(f'{str1 = }, {str2 =}') # str1 = 'python', str2 ='work' print(f'{str_temp.split("-") = }') # str_temp.split("-") = ['python', 'work'] |
f文字列の書式設定方法はformatの場合と同じですが、{}内にコロン(:)と書式設定を記述します。
書式は、配置文字+文字列幅の最小長さ+type(表現型) の順に指定します。
【配置文字】<
左揃え、>
右揃え、^
中央揃え
【type】s
文字列、d
整数、f
固定小数点数 など
文字列の書式設定例
typeは s
を指定します。
1 2 3 4 5 6 7 8 9 | str = 'python' print(f'|{str:<10s}|') # |python | print(f'|{str:>10s}|') # | python| print(f'|{str:^10s}|') # | python | |
整数値の書式設定例
typeは d
を指定します。
1 2 3 4 5 6 7 8 9 | value = 10 print(f'|{value:d}|') # |10| print(f'|{value:<5d}|') # |10 | print(f'|{value:>5d}|') # | 10| |
小数点を含む数値の書式設定例
typeは f
を指定します。
小数点の桁数は標準では 6桁になっています。桁数を指定する場合はドット(.)のあとに桁数を指定します。
1 2 3 4 5 6 7 8 | print(f'|{value:f}|') # |3.140000| print(f'|{value:.2f}|') # |3.14| print(f'|{value:>8.2f}|') # | 3.14| |
Pythonで文字列を扱う方法について解説しました。