※このページは型(数値や文字列など)①の続きです。
①は以下をご覧ください。
前回のページでは型の基本(静的型付け言語と動的型付け言語の違いや型の種類など)と、str()を使った型の変換方法を解説しました。
ここでは主に文字列の操作方法(置換、削除、分割、結合)について解説します。
YouTubeも公開していますので、動画や音声で聞きたい方はぜひご覧ください。
文字列の置換 - replace()
文字列を置換するにはreplace()を使います。replace()の書式は次の通りです。
[構文]
replace(検索文字列, 置換文字列, 個数)
replace()は検索文字列に指定した文字列を直接置換しないで、新しい文字列を返却します。
次のコードでは早口言葉を別の早口言葉に変更しています。
str = '赤パジャマ青パジャマ黄パジャマ'
modified_str = str.replace('パジャマ', 'まき紙')
print(modified_str)
[出力結果]
赤まき紙青まき紙黄まき紙
パジャマをまき紙に変更しました。3つ目の引数は置換する個数を指定しますが、何も指定しない場合は全ての文字列が置換されます。
個数を指定するパターンも見てみましょう。
str = 'Herro Python World!' #Herro ← タイポ
modified_str = str.replace('r', 'l', 2)
print(modified_str)
[出力結果]
Hello Python World!
今回は置換する個数を2つに指定しているので、Herroのrはlに置き換えられましたが、World!のrは置き換えられていません。
replace()でカンマ区切り文字列の先頭のカンマを取り除く
csvファイルへの書き込みをする場合に、ループしながらカンマ区切りの文字列を作ることがありますが、先頭のカンマが御用ではないことがあります。
このような場合もreplace()は便利です。次のようにすることで、先頭のカンマを取り除くことができます。
list = ['val1', 'val2', 'val3']
csv_line = ''
for val in list:
csv_line += ','
csv_line += val
print(csv_line) #先頭のカンマを除きたい
print(csv_line.replace(',', '', 1)) #先頭から1つ目のカンマだけ取り除く
[出力結果]
,val1,val2,val3
val1,val2,val3
replace()で1つ目のカンマだけ空文字に置き換えることで、求めていたcsvの行を作ることができました。
不必要な文字を削除 - strip()
文字列の前後にある空白や改行コードを取り除きたい場合はstrip()を使います。
[構文]
strip(除去する文字)
除去する文字を指定することで、例えばカンマやピリオドを除去することも可能です。
次のコードではstrip()を使って空白や改行コード、ピリオドを除去しています。
str = ' Hello\nWorld \n'
print(str.strip())
str = 'Now Loading...'
print(str.strip('.'))
[出力結果]
Hello
World
Now Loading
Hello Worldの文字列は左右に空白と、最後に改行コードが含まれていましたが、strip()を通すことで間の改行以外は全て除去されました。
Now Loading...の右側のピリオドが除去されているのは、strip()の除去する文字にピリオドを指定しているためです。
また、strip()の仲間にlstrip()とrstrip()という関数がいます。それぞれ左側のみ、右側のみ文字を取り除きたい場合に便利です。
str = '__Hello__'
print(str.lstrip('_'))
print(str.rstrip('_'))
[出力結果]
Hello__
__Hello
文字列の分割 - split()
文字列をある文字列(セパレータ文字列)で分割するにはsplit()を使います。
split(セパレータ文字列, 最大分割数)
split()はcsvファイルの行を分割する場合などに使われます。
次のコードはsplit()でカンマ区切りの文字列を分割しています。
str = 'val1,val2,val3'
vals = str.split(',')
print(vals)
[出力結果]
['val1', 'val2', 'val3']
split()は分割した文字列のリストを返却します。
今回はカンマを指定しましたが、文字列であればどんなものでも指定できます。
str = 'なまむぎなまごめなまたまご'
print(str.split('なま'))
[出力結果]
['', 'むぎ', 'ごめ', 'たまご']
リストの結合 - join()
今度はリストの文字列を一つの文字列に結合させてみましょう。
リストを結合するにはjoin()を使います。
[構文]
join(リストやタプルなど)
実際に結合してみましょう。
次のコードではカンマ区切りで文字列を結合しています。
list = ['val1', 'val2', 'val3']
print(','.join(list))
[出力結果]
val1,val2,val3
join()はセパレータ文字列.join()という使い方をします。上のコードではカンマをセパレータとしたいので、’,’.join()という書き方をしています。
なお、join()を使う場合はリスト内の要素が全て文字列である必要があります。文字列以外を含んでいる場合はTypeErrorになります。
list = ['val1', 2, 'val3']
print(','.join(list))
[出力結果]
TypeError: sequence item 1: expected str instance, int found
この場合は全ての要素を文字列に変換しましょう。
リスト内の要素を文字列にするにはmap()が便利です。
map()は2つ目の引数に指定したリストの全要素に対して、1つ目に指定した関数(文字列で指定する)を適用する関数です。
実際のコードが以下です。
list = [10, True, 'へび']
str_list = map(str, list) #リストの全ての要素をstr()で文字列に変換する
print(','.join(str_list))
[出力結果]
10,True,へび
文字列に値を差し込む - format()
計算結果などを単純にprint()するだけでなく、計算結果の説明を加えた文字列として出力したい場合は多いかと思います。そういった場合に便利なのがformat()です。
最も基本的な使い方は{}を文字列内に入れて、format()の引数に{}と置き換えたい内容を記述する方法です。
str = '1 + 2の答えは{}です'.format(1 + 2)
print(str)
[出力結果]
1 + 2の答えは3です
{}と書かれた箇所にformat()の引数の結果を差し込んで出力しています。
差し込む内容を変えることで一つのテンプレート文字列で複数のパターンを作成できます。
str = '好きな食べ物は{}です'
foods = ['パンケーキ', 'ワッフル', '梅干し']
for food in foods:
print(str.format(food))
[出力結果]
好きな食べ物はパンケーキです
好きな食べ物はワッフルです
好きな食べ物は梅干しです
差し込む位置を指定する
{}の中にインデックス番号を振ることで、差し込む位置を指定することができます。
str = '好きな食べ物は{0}と{1}と{2}です'
favo_food = str.format('パンケーキ', 'ワッフル', '梅干し')
print(favo_food)
[出力結果]
好きな食べ物はパンケーキとワッフルと梅干しです
文字列内で設定したインデックス番号と、format()で指定した引数の順番が対応しているのが分かります。
辞書を使って差し込む位置を指定する
format()の引数に辞書を指定して差し替える方法もあります。
dic = {'name':'佐藤', 'total_score':'491'}
result = '{0[name]}さんの合計点は{0[total_score]}点です。'
print(result.format(dic))
[出力結果]
佐藤さんの合計点は491点です。
{0[key]}と指定することで、辞書のキーと対応付けて要素を差し込むことができます。
エスケープシーケンス
最後にエスケープシーケンスについて解説します。
エスケープシーケンスとは入力できない文字や見えない文字を入力できるようにするための処置です。例えば改行文字や、「’」の文字列内の「’」を出力したい場合で用いられます。
実際にエスケープシーケンスを使うと次のようなことができます。
print('He¥'s well at cat playing')
[出力結果]
He's well at cat playing
エスケープシーケンスはWindowsでは「¥」、Macでは「\」を使います(上のコードはWindowsの場合)。
「‘’」で囲われた文字列内で「’」を使った文字列を格納したい場合、「’」の前に「¥」を入れることで出力できました。
よく使われるエスケープシーケンスのパターンは次の5つです。
エスケープシーケンス | 意味 |
---|---|
¥¥ | バックスラッシュ (¥) |
¥' | シングルクォーテーション (') |
¥" | ダブルクォーテーション(") |
¥n | 改行 |
¥t | タブ |
例えばtsvファイル(データがタブで区切られたファイル)を作成したい場合は¥tと¥nを使って次のように表現できます。
print('val1\tval2\tval3\nval4\tval5\tval6')
[出力結果]
val1 val2 val3
val4 val5 val6
エスケープシーケンスを使うと文字列が見づらくなりがちなので、エディタの配色などを利用して分かりやすくすると良いと思います。