Pythonでプログラミングをしていると、ユーザーからの入力データやファイルから読み込んだテキストなど、文字列に含まれる不要な空白を削除したい場面が頻繁に訪れます。
一口に「空白」と言っても、その種類や場所は様々です。
- 文字列の両端にある余分なスペース
- 文字列に含まれるすべてのスペース
- 単語と単語の間に複数連続するスペース
この記事では、これらの様々なケースに対応するため、Pythonで空白を削除するための代表的な方法を、目的別に徹底解説します。
基本的なstrip()
から、高速なtranslate()
まで、サンプルコード付きでわかりやすく紹介するので、目的に応じた方法が見つかるでしょう。
【本記事の信頼性】
- 執筆者は元エンジニア
- 大手プログラミングスクールのWebディレクター兼ライターを経験
- 自らも地元密着型のプログラミングスクールを運営
受講生から評判の良いプログラミングスクール
スクール |
特徴 |
受講料金 |
大手比較サイトで4年連続人気NO.1!受講生からの評判も非常に高く、Web系のエンジニアを目指すならRUNTEQ一択。 | 550,000円(給付金適用あり) | |
月単価80万円以上の現役エンジニア講師による指導!一度入会すればサポートは半永久的。 | 498,000円 | |
格安で質の高いWeb制作スキルを習得したい人におすすめ!業界最安級の料金でありながら、コミュニティやサポートが充実。 | 129,800円~ | |
完全無料でプログラミングが学べる貴重なスクール!最短1ヶ月で卒業可能。ゼロスク運営会社への就職もできる。 | 無料 | |
長期間に渡って学習し、希少人材を目指す人に最適なスクール!受講料は高いものの、高収入を得られる人材を目指せる。 | 96~132万円 |
【目的別】Pythonでの空白削除方法の早見表
まずは結論から。
これから解説する内容を早見表にまとめました。
自分のやりたいことに最も近い方法から読み進めてみてください。
削除したい空白の種類 | 推奨されるメソッド | 特徴 |
---|---|---|
文字列の両端にある空白や改行 | strip() , lstrip() , rstrip() |
最も基本的でよく使われる。高速。 |
文字列に含まれるすべての空白 | replace() |
構文がシンプルで直感的。分かりやすい。 |
文字列に含まれるすべての空白(高速) | translate() |
大量データの場合replace() より高速。 |
単語間の連続する空白を1つにまとめる | split() と join() |
複数の空白を単一のスペースに正規化できる。 |
方法1:両端の空白・改行を削除する (strip, lstrip, rstrip)
文字列の先頭や末尾に存在する不要な空白を削除するのは、最も一般的なユースケースです。
これにはstrip()
メソッド群を使います。
strip():両端の空白を削除
strip()
は、文字列の両端にある空白文字(スペース、タブ \t
、改行 \n
など)をすべて取り除きます。
サンプルコード
text = " Hello, World! \n"
# 両端の空白文字を削除
cleaned_text = text.strip()
print(f"元の文字列: '[{text}]'")
print(f"strip()後の文字列: '[{cleaned_text}]'")
実行結果
元の文字列: '[ Hello, World!
]'
strip()後の文字列: '[Hello, World!]'
ソースコードの解説
text
変数には、先頭と末尾に複数の半角スペースと、末尾に改行文字\n
が含まれています。
text.strip()
を実行することで、これらの空白文字がすべて削除され、純粋なHello, World!
だけが残ります。
文字列の内部にある空白は削除されない点に注意してください。
lstrip() と rstrip()
lstrip()
:文字列の左側(Left)、つまり先頭の空白だけを削除します。rstrip()
:文字列の右側(Right)、つまり末尾の空白だけを削除します。
サンプルコード
text = " Hello, World! \n"
# 左端の空白だけを削除
left_cleaned = text.lstrip()
print(f"lstrip()後の文字列: '[{left_cleaned}]'")
# 右端の空白だけを削除
right_cleaned = text.rstrip()
print(f"rstrip()後の文字列: '[{right_cleaned}]'")
実行結果
lstrip()後の文字列: '[Hello, World!
]'
rstrip()後の文字列: '[ Hello, World!]'
```lstrip()`は先頭の空白のみ、`rstrip()`は末尾の空白と改行文字のみを削除していることが分かります。
---
## 方法2:文字列中のすべての空白を削除する (`replace`)
文字列の端だけでなく、**内部に含まれるものも含めてすべての空白を削除したい**場合は、`replace()`メソッドを使うのが最もシンプルで直感的です。
#### サンプルコード
```python
text = "p y t h o n is fun !"
# 半角スペースをすべて削除
no_space_text = text.replace(' ', '')
# 全角スペースをすべて削除
no_full_space_text = text.replace(' ', '')
# 半角・全角スペースを両方削除
no_all_spaces_text = text.replace(' ', '').replace(' ', '')
print(f"元の文字列: '{text}'")
print(f"半角スペース削除後: '{no_space_text}'")
print(f"全角スペース削除後: '{no_full_space_text}'")
print(f"すべてのスペース削除後: '{no_all_spaces_text}'")
実行結果
元の文字列: 'p y t h o n is fun !'
半角スペース削除後: 'python is fun!'
全角スペース削除後: 'p y t h o nis fun !'
すべてのスペース削除後: 'pythonisfun!'
ソースコードの解説
replace('置換前の文字列', '置換後の文字列')
は、第一引数に指定した文字列を、第二引数の文字列にすべて置き換えます。
空白を削除したい場合は、第二引数に空の文字列''
を指定します。
この例のように、replace()
をメソッドチェーンで繋げることで、半角スペースと全角スペースの両方を一度に削除することも可能です。
方法2:すべての空白を高速に削除する (translate)
大量のテキストデータに含まれるすべての空白を削除する場合など、処理速度が重要になる場面では、replace()
よりも高速なtranslate()
メソッドが有効です。
translate()
は少し特殊で、str.maketrans()
で作成した「変換テーブル」と組み合わせて使います。
サンプルコード
import string
text = "p y t h o n is fun !\t\n"
# 削除したい文字のリスト
chars_to_remove = ' \t\n' # 半角スペース, 全角スペース, タブ, 改行
# 変換テーブルを作成
# 第3引数に削除したい文字を指定する
translation_table = str.maketrans('', '', chars_to_remove)
# translate()で一括削除
fast_cleaned_text = text.translate(translation_table)
print(f"元の文字列: '{text}'")
print(f"translate()後の文字列: '{fast_cleaned_text}'")
実行結果
元の文字列: 'p y t h o n is fun !
'
translate()後の文字列: 'pythonisfun!'
ソースコードの解説
str.maketrans('', '', '削除したい文字群')
で、どの文字を削除するかのルールを定義した変換テーブルを作成します。- 作成したテーブルを
text.translate()
の引数に渡すことで、指定されたすべての文字が一括で削除されます。
replace()
を何度も呼び出すのに比べて、translate()
は内部的に1回の操作で処理が完了するため、特に削除したい文字の種類が多い場合にパフォーマンスの優位性が現れます。
方法3:単語間の連続する空白を1つにまとめる (split + join)
「空白を完全に削除する」のではなく、「複数連続する空白を、単一の半角スペースに統一したい」という整形ニーズもよくあります。
この場合は、split()
とjoin()
を組み合わせるテクニックが非常に有効です。
サンプルコード
text = "Hello World! \n Welcome to \t Python."
# split()で空白文字を区切りに単語リストに分割
words = text.split()
print(f"split()後のリスト: {words}")
# ' ' (半角スペース) を区切り文字として再結合
normalized_text = ' '.join(words)
print(f"join()後の文字列: '{normalized_text}'")
実行結果
split()後のリスト: ['Hello', 'World!', 'Welcome', 'to', 'Python.']
join()後の文字列: 'Hello World! Welcome to Python.'
ソースコードの解説
text.split()
を実行すると、文字列は半角スペース、全角スペース、タブ、改行といったすべての連続する空白文字を区切りとして分割され、単語のリストが生成されます。' '.join(words)
では、その単語リストの各要素を' '
(半角スペース)で繋ぎ合わせて、一つの新しい文字列を生成します。
この2段階の処理により、種類や数がバラバラだった空白が、きれいな半角スペース1つに正規化されます。
まとめ
以上、Pythonで文字列から空白を削除するための様々な方法を、目的別に解説しました。
なお、Pythonを体系的に学んだり、Pythonのスキルを高めたりするためには、プログラミングスクールを利用するのも有効です。
細かな疑問がすぐに解決するだけでなく、現役エンジニアが「質の高いポートフォリオ」を作成するための手助けをしてくれたり、エンジニア就職・転職のコツを教えてくれたりするなど、様々なメリットがありますので、独学に疲れた方は検討してみてはいかがでしょうか。