Pythonでテキストデータを処理していると、
「特定の記号を一括で消去したい」
「リストの中から特定の単語を含む要素だけ削除したい」
こういった場面に頻繁に遭遇します。
一言で「削除」と言っても、文字列(String)の一部を消すのか、リスト(List)の要素を消すのかによって使うべきメソッドは異なります。
また、Pythonのバージョンアップに伴い、より直感的で便利なメソッドも登場しています。
この記事では、Pythonにおける「特定の文字を削除する」ためのあらゆる手法を、文字列操作とリスト操作の2つの側面に分けて、サンプルコード付きで徹底的に解説します。
現在の開発現場で推奨される最新の書き方も紹介しますので、ぜひ参考にしてください。
![]() 執筆者:マヒロ |
|
文字列から特定の文字を削除する基本テクニック
Pythonの文字列は「イミュータブル(変更不可)」であるため、元の文字列を直接書き換えることはできません。
削除操作を行った「新しい文字列」を生成して返すのが基本動作となります。
まずは、最も頻繁に使われる基本的なメソッドから見ていきましょう。
replace() で特定の文字をすべて削除する
特定の文字や文字列を、文章全体から完全に消去したい場合は、replace() メソッドを使います。
「削除する」という専用のメソッドがあるわけではなく、「空文字 "" に置換する」 ことで削除を実現します。
text = "Python-is-fun-and-powerful"
# ハイフン "-" を空文字 "" に置換して削除
cleaned_text = text.replace("-", "")
print(f"元データ: {text}")
print(f"削除後 : {cleaned_text}")
実行結果
元データ: Python-is-fun-and-powerful
削除後 : Pythonisfunandpowerful
text.replace("-", "") と記述することで、変数 text に含まれるすべてのハイフンが取り除かれます。
第三引数に回数を指定することも可能で、text.replace("-", "", 2) とすれば、最初の2つだけを削除することができます。
strip() 系で両端の文字を削除する
文字列の「先頭」や「末尾」にある不要な文字(空白や改行コードなど)を削除したい場合は、strip() メソッド群を使用します。
strip(): 両端の文字を削除lstrip(): 左側(先頭)の文字のみ削除rstrip(): 右側(末尾)の文字のみ削除
text = " Hello Python! "
# 両端の空白を削除
print(f"strip : '{text.strip()}'")
# 左側の空白のみ削除
print(f"lstrip: '{text.lstrip()}'")
# 右側の空白のみ削除
print(f"rstrip: '{text.rstrip()}'")
実行結果
strip : 'Hello Python!'
lstrip: 'Hello Python! '
rstrip: ' Hello Python!'
引数を指定しない場合、デフォルトで空白文字(スペース、タブ、改行)が削除されます。
text.strip("*") のように引数を指定すれば、空白以外の特定の文字を端から取り除くことも可能です。
ただし、これはあくまで「端にある文字」を消すものであり、文字列の内部にある文字は削除されません。
removeprefix() / removesuffix() で接頭辞・接尾辞を削除
Python 3.9から追加された removeprefix() と removesuffix() は、特定の言葉で始まるとき(または終わるとき)だけ、その部分を削除するメソッドです。
以前はスライスや startswith を組み合わせて実装していましたが、現在はこちらを使うのがベストプラクティスです。
filename = "report_2026.txt"
# 接頭辞 "report_" を削除
name_only = filename.removeprefix("report_")
# 接尾辞 ".txt" を削除
base_name = filename.removesuffix(".txt")
print(f"接頭辞削除: {name_only}")
print(f"接尾辞削除: {base_name}")
実行結果
接頭辞削除: 2026.txt
接尾辞削除: report_2026
filename.removeprefix("report_") は、文字列が "report_" で始まっている場合のみ削除を行います。
もし始まっていなければ、元の文字列をそのまま返します。
lstrip() との違いは、「指定した文字列そのもの」を判定するかどうかです。
lstrip("report_") だと "r", "e", "p"… のいずれかの文字が先頭にある限り消してしまうため、意図しない挙動になることがありますが、removeprefix() なら安全です。
複数の文字やパターンを指定して削除する応用
「数字だけを全部消したい」「”a”と”b”と”c”をまとめて消したい」といった、少し複雑な削除を行いたい場合のテクニックを紹介します。
translate() で複数の文字を一度に削除する
特定の複数の文字(例:母音だけ、記号だけ)をまとめて削除したい場合、replace() を何度もチェーンするのは効率が悪く、コードも読みにくくなります。
そんな時は translate() と str.maketrans() を組み合わせると高速に処理できます。
text = "p-y+t=h/o.n"
# 削除したい文字の辞書を作成(第3引数に削除する文字を指定)
table = str.maketrans("", "", "-+=/.")
# 変換テーブルを使って削除実行
cleaned_text = text.translate(table)
print(cleaned_text)
実行結果
python
str.maketrans("", "", 削除したい文字) で変換テーブルを作成し、それを translate() に渡すことで、指定した文字を一括で削除できます。
大量のテキストデータを処理する際に非常にパフォーマンスが良い方法です。
re.sub() で正規表現を使って削除する
「数字だけ削除」「アルファベット以外を削除」など、パターンに基づいた削除には正規表現モジュール re の sub() 関数を使用します。
import re
text = "Python 3.14 is released in 2025."
# 数字(\d)をすべて削除(空文字に置換)
no_digits = re.sub(r"\d+", "", text)
# アルファベットとスペース以外を削除(記号などを消す)
only_alpha = re.sub(r"[^a-zA-Z\s]", "", text)
print(f"数字削除: {no_digits}")
print(f"文字のみ: {only_alpha}")
実行結果
数字削除: Python . is released in .
文字のみ: Python is released in
re.sub(正規表現パターン, 置換後の文字, 対象文字列) の形式で使用します。
r"\d+" は「1文字以上の数字」を表し、これを空文字に置換することで削除を実現しています。
データのクレンジング(前処理)で非常に強力な武器となります。
スライスで位置を指定して削除する
「先頭の3文字を削除したい」「後ろから1文字消したい」といった位置による削除には、スライス機能を使います。
text = "ID:12345"
# 最初の3文字 ("ID:") を削除
# インデックス3以降を取得する
result = text[3:]
print(result)
実行結果
12345
text[3:] は「インデックス3(4文字目)から最後まで」を切り出す操作です。
結果として、インデックス0〜2(先頭3文字)が削除されたことになります。
リスト(配列)から特定の要素を削除する方法
ここまでは「1つの文字列の中」から文字を消す話でしたが、実務では「文字列のリスト」から特定の要素を削除したいケースも多々あります。
remove() と pop() の使い分け
リストから要素を削除する基本的なメソッドは以下の2つです。
remove(値): 指定した「値」と一致する最初の要素を削除します。pop(インデックス): 指定した「位置」の要素を削除し、その値を取得します。
fruits = ["apple", "banana", "orange", "banana"]
# "banana" を削除(最初に見つかった1つだけ消える)
fruits.remove("banana")
print(f"remove後: {fruits}")
# インデックス1(この時点ではorange)を削除
removed_item = fruits.pop(1)
print(f"pop後 : {fruits}")
print(f"削除した値: {removed_item}")
実行結果
remove後: ['apple', 'orange', 'banana']
pop後 : ['apple', 'banana']
削除した値: orange
リスト内包表記で特定条件の要素を一括削除
remove() は最初の1つしか削除しません。
リスト内の「特定の文字を含む要素」をすべて削除したい場合は、リスト内包表記を使って「必要なものだけ残す(フィルタリングする)」という考え方で実装します。
files = ["data.csv", "image.jpg", "backup.csv", "memo.txt"]
# ".csv" を含むファイルを削除(=含まないファイルだけ残す)
filtered_files = [f for f in files if ".csv" not in f]
print(filtered_files)
実行結果
['image.jpg', 'memo.txt']
[f for f in files if 条件] という構文を使います。
ここでは if ".csv" not in f とすることで、「.csvを含まない要素」だけを集めた新しいリストを作成しています。
これがPythonにおける最も効率的で一般的な一括削除(フィルタリング)の方法です。
Pythonのスキルを活かして年収を上げる方法
以上、Pythonで特定の文字を削除する方法について解説してきました。
なお、Pythonのスキルがある場合には、「転職して年収をアップさせる」「副業で稼ぐ」といった方法を検討するのがおすすめです。
Pythonエンジニアの需要は非常に高いため、転職によって数十万円の年収アップはザラで、100万円以上年収が上がることも珍しくありません。
なお、転職によって年収を上げたい場合は、エンジニア専門の転職エージェントサービスを利用するのが最適です。
併せて、副業案件を獲得できるエージェントにも登録しておくと、空いている時間を活かして稼げるようなPythonの案件を探しやすくなります。
転職エージェントも副業エージェントも、登録・利用は完全無料なので、どんな求人や副業案件があるのか気になる方は、気軽に利用してみるとよいでしょう。



