現在使っているシステムの都合上、環境依存文字が弾かれてしまう…。
Pythonで文字列を置換する方法は無いの?
あります!
では今回は、「Pythonで文字列を置換する方法」を
できるだけわかりやすく解説いたします。
「後ろから置換」「改行コードを削除」「配列を一括置換」
なども紹介いたします。
ぜひ最後まで読んでいってください。
[基本]Pythonで文字列を置換する方法
文字列の置換には「replace」を使います。
早速ですが、使い方を見ていきましょう。
まずは簡単な例から解説いたします。
文字列を置換する際に変数を使用します。
変数の特性については下記記事をご参考ください。
1文字を置換
「before」という変数に「あいうえお」という文字列が入っています。
「あいうえお」の「う」を「く」に置換して、「あいくえお」にしてみましょう。
before = 'あいうえお'
after = before.replace('う','く')
print(after)
<実行結果>
あいくえお
【コード2行目の解説】
左辺に、置換後の文字列を格納する変数「after」を作成します。
右辺には、元の変数に続けて「.replace()」を記述します。
()内には、「変更したい文字」「,(カンマ)」「変更後の文字」の順に書いて完了です。
<テンプレ>
【 置換後の文字列を格納する変数 = 元の変数.replace(‘変更したい文字’,’変更後の文字’) 】
変数の中に同じ文字が複数ある場合、全ての文字が置換されます。
before = 'あいうえう'
after = before.replace('う','く')
print(after)
<実行結果>
あいくえく
2文字以上を置換
連続した2文字以上の文字列を置換することも可能です。
before = 'あいうえお'
after = before.replace('いう','きく')
print(after)
<実行結果>
あきくえお
「いう」が「きく」に置換されました。
複数の文字を置換
連続しない複数の文字を置換することもできます。
before = 'あいうえお'
after = before.replace('い','き').replace('え','け')
print(after)
<実行結果>
あきうけお
「い」が「き」に、「え」が「け」に置換されました。
文字を削除
置換後の文字を空白にすることで、文字を削除することができます。
before = 'あいうえお'
after = before.replace('う','')
print(after)
<実行結果>
あいえお
「う」が削除されました。
[応用]Pythonで文字列を置換する方法
すべて前項で解説したものの応用です。
使い方や書き方については前項の基本編をご参考ください。
置換する文字を変数で指定
replaceで置換する文字を、変数で指定することができます。
before = 'あいうえお'
u = 'う'
ki = 'き'
after = before.replace(u,ki)
print(after)
<実行結果>
あいきえお
改行コードを削除
削除の応用として、改行コードである「\n」を削除することもできます。
before = 'あいうえお\nかきくけこ'
print(before)
after = before.replace('\n','')
print(after)
<実行結果>
あいきえお
かきくけこ
あいうえおかきくけこ
改行が削除されました。
「’(シングルクォーテーション)」を削除
文字指定の際に「’(シングルクォーテーション)」を使っているため、通常は「’」を削除することができません。
しかしながら、文字指定の「’」を「”(ダブルクォーテーション)」で代用することで、実現できます。
before = "あい'う'えお"
print(before)
after = before.replace("'","")
print(after)
<実行結果>
あい’う’えお
あいうえお
「’」が削除されました。
文字を1回だけ置換
「しんぶんし」の「ん」を1回だけ置換して、「しきぶんし」にすることができます。
before = 'しんぶんし'
after = before.replace('ん','き',1)
print(after)
<実行結果>
しきぶんし
【コード2行目の解説】
()内の最後の数字は何個目までの文字を置換するかの指定です。
1なら最初の1つで終了し、2つ目以降は置換されません。
2なら2つ目までという具合です。
後ろから文字を1回だけ置換
「あきあああ」を後ろから1回だけ置換して、「あきああい」にすることができます。
before = 'あきあああ'
before = before[::-1]
after = before.replace('あ','い',1)
after = after[::-1]
print(after)
<実行結果>
あきああい
コード2行目:「before[::-1]」で文字列を逆順にしています(あきあああ → あああきあ)
コード3行目:頭の1回だけ「あ」を「い」に置換しています。
コード4行目:再度逆順にすることで、元の順番に戻しています。
配列(リスト)の文字列を一括置換
配列(リスト)に入った[‘あめんぼ’,’あかいな’,’あいうえお’]の「あ」を全て一括で置換することができます。
before = ['あめんぼ','あかいな','あいうえお']
after = []
for middle in before:
after.append(middle.replace('あ','か'))
print(after)
<実行結果>
[‘かめんぼ’, ‘かかいな’, ‘かいうえお’]
for文と配列を使っている以外は前項で解説した方法と同じです。
for文や配列については別の記事をご参考ください。
うまく動作しない時の対処法
文字列が置換されない
置換後の文字列を再代入していない
「before.replace()」だけでは、置換後の文字が「before」に入るわけではありません。
「after」のような新しい変数を用意し、「after = before.replace()」というように代入するか、「before = before.replace()」のように再代入する必要があります。
実際の文字と指定の文字が違う
実際の文字が大文字で、指定の文字が小文字だった場合、置換は実行されません。
全角と半角なども同じです。
また、半角スペースやアンダーバー、トッドなど、わかりにくい文字が紛れ込んでいないかも確認しましょう。
エラーが出る
○○ is not defined
今まで出てきていない変数などを処理しようとした時に出るエラーです。
変数名などが間違っていないかチェックしましょう。
詳しい解説は、下記記事をご参考ください。
その他のエラー
その他のエラーが出た場合は、エラー文をコピーしてNETで検索してみましょう。
最後に
Pythonで文字列を置換する方法を解説いたしました。
当ブログでは、xlwingsやopenpyxlなど、Pythonに関する情報を配信しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。
挫折せずにPythonを独学で学習する方法は特におすすめです。
最後までお読みいただき、ありがとうございました。がんばってください!