読み込み中...

Pythonにおけるstrip関数を用いて文字列からスペースを削除する方法10選

strip関数の徹底解説 Python
この記事は約14分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

本記事のサンプルコードを活用して機能追加、目的を達成できるように作ってありますので、是非ご活用ください。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を満たす現役のプログラマチームによって監修されています。

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

●Pythonのstrip関数とは?

Pythonの文字列処理において、strip関数は非常に重要な役割を果たします。

私たちプログラマは、ユーザーからの入力データや外部ファイルからの読み込みデータを扱う際に、しばしば不要な空白文字に悩まされることがあります。

そんな時、strip関数が強力な味方となってくれるのです。

strip関数は、文字列の先頭と末尾から指定された文字を取り除くメソッドです。

デフォルトでは空白文字(スペース、タブ、改行など)が削除対象となりますが、引数で任意の文字を指定することもできます。

これで、文字列のトリミングや正規化を簡単に行うことができます。

○strip関数の基本的な使い方

strip関数の基本的な使い方は、次のようになります。

string.strip(chars)

ここで、stringは処理対象の文字列、charsは削除する文字を指定します。

charsを省略した場合は、デフォルトで空白文字が削除されます。

strip関数は、文字列の先頭からcharsに含まれる文字を順に削除していきます。

先頭でcharsに含まれない文字が現れた時点で、先頭からの削除を終了します。

同様に、文字列の末尾からもcharsに含まれる文字を順に削除していき、charsに含まれない文字が現れた時点で末尾からの削除を終了します。

○lstrip関数とrstrip関数

strip関数には、左側(先頭)のみ、または右側(末尾)のみを処理する兄弟メソッドも用意されています。

  • lstrip(chars): 文字列の先頭からcharsに含まれる文字を削除する
  • rstrip(chars): 文字列の末尾からcharsに含まれる文字を削除する

このメソッドを使い分けることで、より細かな制御が可能となります。

○サンプルコード1:文字列の前後の空白を削除する

それでは実際に、strip関数を使ってみましょう。

まずは、文字列の前後に存在する空白文字を削除する例です。

text = "  Hello, World!  "
cleaned_text = text.strip()
print(cleaned_text)

実行結果は次のようになります。

Hello, World!

このように、strip関数を呼び出すだけで、文字列の前後の空白が簡単に削除できました。

これで、ユーザー入力データのクリーニングや、ファイルから読み込んだデータの正規化などが容易になります。

大変失礼いたしました。指摘いただいた箇所に注意し、再度記述いたします。

●strip関数で削除できる文字

前章ではstrip関数の基本的な使い方を解説してましたが、その真価は空白文字以外の削除にこそ発揮されます。

私たちプログラマは日々、ユーザー入力のバリデーションや外部データのクレンジングに追われていますが、そこでは特定の文字を取り除く必要に迫られることが多いです。

そんな時、strip関数の引数に削除したい文字を指定すれば、簡単かつ的確に目的を達成できます。

引数には単一の文字でも複数の文字でも構いません。

例えばstrip('abc')とすれば、文字列の先頭と末尾から’a’, ‘b’, ‘c’のいずれかが連続する限り削除されます。

こうした柔軟性により、不要な記号や特定パターンの文字列を一括して取り除くことができ、コードの可読性と保守性が格段に向上します。

それでは、具体的なサンプルコードを見ていきましょう。

○サンプルコード2:文字列の前後の改行を削除する

ファイルから読み込んだテキストデータを扱う際、行末の改行コードには常に注意が必要です。

思わぬバグに巻き込まれないためにも、事前に適切に処理しておきたいものです。

strip関数を使えば、そんな改行コードを簡単に取り除くことができます。

text = "\nHello, World!\n"
cleaned_text = text.strip('\n')
print(repr(cleaned_text))

実行結果は次のようになります。

'Hello, World!'

repr()関数で出力することで、改行コードが確かに削除されていることが明瞭に確認できますね。

改行コードは’\n’の他にも’\r\n’のように複数の文字から成ることがあるので、状況に応じて引数を適切に調整することが肝要です。

○サンプルコード3:文字列の前後の全角スペースを削除する

全角スペース(U+3000)は、半角スペースと見分けがつきづらく、厄介な存在として知られています。

うっかり見逃すと、後々バグの温床になりかねません。でも安心してください。

strip関数を使えば、そんな全角スペースもあっさり排除できます。

text = " Hello, World! "
cleaned_text = text.strip(' ')
print(repr(cleaned_text))

実行結果は次のとおりです。

'Hello, World!'

全角スペースを引数に明示的に指定する必要はありますが、あとはstrip関数におまかせ。

見た目も中身もスッキリした文字列を得ることができます。

○サンプルコード4:複数の文字を指定して削除する

strip関数の引数には、削除したい文字を複数指定することができます。

不要な文字の組み合わせが多岐に渡る場合でも、これなら一括して対処可能。

パターンマッチングの要領で、まとめて処理してしまいましょう。

text = "abc123def"
cleaned_text = text.strip('abcdef')
print(cleaned_text)

実行結果は以下のようになります。

123

この例では、文字列の先頭と末尾から’a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’のいずれかが連続する限り削除されています。

接頭辞や接尾辞など、不要な文字列のパターンを柔軟に指定できるのは、まさにstrip関数の真骨頂と言えるでしょう。

○サンプルコード5:正規表現を使って削除する文字を指定する

strip関数の引数指定は強力な機能ですが、正規表現を使えばさらに高度な文字列処理が可能になります。

複雑なパターンの文字列も、正規表現なら一発で取り除けるのです。

import re

text = "Hello, World! 123"
cleaned_text = re.sub(r'^.*?\d+', '', text)
print(cleaned_text)

実行結果は次のようになります。

Hello, World! 

この例では、正規表現^.*?\d+を使って、文字列の先頭から数字が現れるまでの部分を削除しています。

re.sub()関数の第1引数に正規表現、第2引数に置換後の文字列(ここでは空文字列)、第3引数に対象の文字列を指定することで、パターンにマッチする部分を削除することができます。

正規表現の詳細については本記事の範囲を超えますが、strip関数と組み合わせることで、

より柔軟かつ強力な文字列処理が可能になることは覚えておいて損はないでしょう。

●strip関数の応用例

strip関数の基本的な使い方は理解できたと思います。

でも、それだけでは物足りないと感じている方も多いのではないでしょうか。

ここからは、もう一歩踏み込んで、strip関数のより実践的な応用例を見ていきましょう。

普段の業務では、ユーザー入力のバリデーションや、外部データの前処理など、文字列処理のシーンに遭遇することが多いと思います。

そんな時、strip関数の応用テクニックが役立つことが少なくありません。

ここで紹介する応用例を身につければ、コードの可読性や保守性を高めるだけでなく、バグの温床を事前に排除することもできるでしょう。

それでは、具体的なサンプルコードを交えながら、strip関数の実践的な使い方を学んでいきましょう。

○サンプルコード6:文字列をstrip関数で分割する

文字列を分割する際、split関数を使うことが一般的です。

しかし、分割したい文字列の前後に空白や改行などの不要な文字が含まれている場合、そのままsplit関数を使うと、空の要素が生成されてしまいます。

そんな時は、split関数とstrip関数を組み合わせることで、より確実で信頼性の高い分割が可能になります。

text = "  apple,banana, cherry  "
fruits = [fruit.strip() for fruit in text.split(',')]
print(fruits)

実行結果は次のようになります。

['apple', 'banana', 'cherry']

この例では、リスト内包表記を使って、split関数で分割した各要素に対してstrip関数を適用しています。

これで、分割された文字列の前後の空白が削除され、期待通りのリストが得られます。

○サンプルコード7:リストの要素からstrip関数で空白を削除する

リストの要素に含まれる文字列から、空白や改行などの不要な文字を削除したいケースは珍しくありません。

そんな時は、strip関数をリストの各要素に適用することで、一括して処理できます。

fruits = ['  apple  ', 'banana\n', ' cherry ']
cleaned_fruits = [fruit.strip() for fruit in fruits]
print(cleaned_fruits)

実行結果は次のようになります。

['apple', 'banana', 'cherry']

この例でも、リスト内包表記を使ってstrip関数をリストの各要素に適用しています。

これにより、各文字列の前後の空白や改行が削除され、クリーンな文字列のリストが得られます。

○サンプルコード8:ユーザ入力の空白を自動で削除する

ユーザーからの入力を受け取る際、意図しない空白が含まれていることがよくあります。

そのまま処理を進めると、バグの原因になりかねません。

そこで、strip関数を使ってユーザー入力の空白を自動で削除してしまいましょう。

user_input = input("Enter your name: ")
cleaned_input = user_input.strip()
print(f"Hello, {cleaned_input}!")

実行結果は次のようになります(ユーザー入力は ” John “)。

Enter your name:   John  
Hello, John!

この例では、input関数で受け取ったユーザー入力に対して、strip関数を適用しています。

これにより、入力文字列の前後の空白が自動的に削除され、意図した文字列が得られます。

○サンプルコード9:ファイルから読み込んだ行の空白を削除する

ファイルから読み込んだデータを処理する際、各行の末尾に改行コードが含まれていることがあります。

そのままでは扱いにくいので、strip関数を使って改行コードを削除してしまいましょう。

with open('data.txt', 'r') as file:
    lines = [line.strip() for line in file]
    print(lines)

実行結果は次のようになります(data.txtの内容は “apple\n”, “banana\n”, “cherry\n”)。

['apple', 'banana', 'cherry']

この例では、ファイルオブジェクトをイテレートして各行を読み込み、strip関数で行末の改行コードを削除しています。

これで、改行コードを含まないクリーンな文字列のリストが得られます。

○サンプルコード10:他の文字列メソッドと組み合わせる

strip関数は、他の文字列メソッドと組み合わせることで、より柔軟な文字列処理が可能になります。

例えば、大文字・小文字を統一したい場合は、upper関数やlower関数と組み合わせるとよいでしょう。

text = "  Hello, World!  "
cleaned_text = text.strip().upper()
print(cleaned_text)

実行結果は次のようになります。

HELLO, WORLD!

この例では、strip関数で文字列の前後の空白を削除した後、upper関数で大文字に変換しています。

このように、複数のメソッドをチェーンすることで、目的に応じた文字列処理を簡潔に記述できます。

●strip関数でよくあるエラーと対処法

strip関数を使いこなせるようになると、文字列処理の効率が格段に上がります。

でも、初心者の頃は思わぬエラーに悩まされることも少なくありません。

実は私も、strip関数を使い始めた当初は、似たようなエラーに何度も遭遇しました。

そんな経験から学んだ教訓を、ここであなたと共有したいと思います。

strip関数でよく遭遇するエラーとその対処法を知っておけば、つまずくことなくスムーズに文字列処理を進められるはずです。

では、具体的なエラーの事例を見ていきましょう。

○’str’ object has no attribute ‘strip’エラー

初学者が陥りやすいエラーの1つが、’str’ object has no attribute ‘strip’というエラーメッセージです。

strip関数を呼び出そうとしたのに、なぜかエラーが発生してしまう、そんな経験はありませんか?

実は、変数に文字列ではなく数値が入っていることが原因だったりします。

strip関数は文字列にしか適用できないので、数値に対して呼び出すとエラーになってしまうのです。

num = 123
cleaned_num = num.strip()  # AttributeError: 'int' object has no attribute 'strip'

このエラーを避けるには、変数のデータ型を確認することが大切です。

isinstance関数を使えば、変数が文字列かどうかを簡単にチェックできます。

num = 123
if isinstance(num, str):
    cleaned_num = num.strip()
else:
    print("数値には strip() は使えません")

実行結果は次のようになります。

数値には strip() は使えません

変数のデータ型をチェックする習慣をつけておけば、このエラーに悩まされることはないでしょう。

○rstrip()やlstrip()で思うように空白が削除されない

rstrip()やlstrip()を使っているのに、思うように空白が削除されないことがあります。

特に、文字列の途中に空白が含まれている場合は注意が必要です。

text = "  Hello,  World!  "
cleaned_text = text.rstrip()
print(repr(cleaned_text))  # '  Hello,  World!'

この例では、rstrip()を使っているので、文字列の末尾の空白は削除されています。

しかし、先頭と途中の空白は残ったままです。

lstrip()を使っても、同様の問題が起こります。

text = "  Hello,  World!  "
cleaned_text = text.lstrip()
print(repr(cleaned_text))  # 'Hello,  World!  '

この例では、先頭の空白は削除されていますが、末尾と途中の空白が残っています。

途中の空白も含めて削除したい場合は、strip()を使うのが確実です。

あるいは、replace()を使って空白を明示的に削除する方法もあります。

text = "  Hello,  World!  "
cleaned_text = text.strip()
print(repr(cleaned_text))  # 'Hello,  World!'

text = "  Hello,  World!  "
cleaned_text = text.replace(" ", "")
print(repr(cleaned_text))  # 'Hello,World!'

状況に応じて適切なメソッドを選ぶことが、エラーを避けるコツだと覚えておいてください。

○全角スペースが削除されない

strip()を使っても、全角スペース(U+3000)が削除されないことがあります。

それは、strip()のデフォルトでは半角スペースしか削除対象にならないからです。

text = " Hello, World! "
cleaned_text = text.strip()
print(repr(cleaned_text))  # ' Hello, World! '

この例では、文字列の前後の全角スペースが残ったままになっています。

全角スペースを削除するには、明示的に引数で指定する必要があります。

text = " Hello, World! "
cleaned_text = text.strip(' ')
print(repr(cleaned_text))  # 'Hello, World!'

この例のように、strip()の引数に全角スペースを指定することで、きちんと削除することができます。

全角スペースは見落としやすい文字なので、注意深く確認することが大切です。

まとめ

Pythonのstrip関数について、基本から応用まで詳しく見てきましたが、いかがだったでしょうか。

本記事で学んだ知識を、ぜひ実践の場で活かしてみてください。

皆さんが、文字列処理のエキスパートへと成長していく姿を、心から楽しみにしています。

長い記事を最後まで読んでいただき、ありがとうございました。