文字列.strip() / 文字列.lstrip() / 文字列.rstrip()
| 対応: | Python 2(2000) |
|---|
文字列の先頭・末尾から空白や指定した文字を取り除くメソッドです。ユーザー入力の整形やデータクレンジングに使われます。
構文
# 文字列の両端から空白または指定した文字を取り除く 文字列.strip(除去文字=None) # 文字列の先頭(左端)からのみ取り除く 文字列.lstrip(除去文字=None) # 文字列の末尾(右端)からのみ取り除く 文字列.rstrip(除去文字=None)
関数一覧
| メソッド | 概要 |
|---|---|
| str.strip(chars=None) | 文字列の両端から、指定した文字のいずれかが続く限り取り除きます。chars を省略すると空白文字(スペース・タブ・改行など)を取り除きます。 |
| str.lstrip(chars=None) | 文字列の先頭(左端)から指定した文字を取り除きます。 |
| str.rstrip(chars=None) | 文字列の末尾(右端)から指定した文字を取り除きます。 |
サンプルコード
strip_basic.py
text = " こんにちは、Python! "
print(text.strip())
print(len(text))
print(len(text.strip()))
line = "\t\n データ \n\t"
print(repr(line.strip()))
path = "///usr/local/bin"
print(path.lstrip("/"))
number_str = "000042"
print(number_str.lstrip("0"))
filename = "report.txt..."
print(filename.rstrip("."))
line_with_newline = "データの行\n"
clean_line = line_with_newline.rstrip("\n")
print(repr(clean_line))
実行すると次のように出力されます。
python3 strip_basic.py こんにちは、Python! 19 13 'データ' usr/local/bin 42 report.txt 'データの行'
strip_chars.py
print("aaabbccXYZccbba".strip("abc"))
print("hello".strip("helo"))
実行すると次のように出力されます。
python3 strip_chars.py XYZ
strip_csv.py
csv_line = " 桐生一馬 , 27 , 元極道 "
fields = [field.strip() for field in csv_line.split(",")]
print(fields)
members = [" 錦山彰 ", " 真島吾朗 ", " 澤村遥 ", " 柏木工 "]
cleaned = [m.strip() for m in members]
print(cleaned)
url = "https://example.com"
domain = url.removeprefix("https://")
print(domain)
filename2 = "report.txt"
name = filename2.removesuffix(".txt")
print(name)
実行すると次のように出力されます。
python3 strip_csv.py ['桐生一馬', '27', '元極道'] ['錦山彰', '真島吾朗', '澤村遥', '柏木工'] example.com report
よくあるミス
よくあるミス1: strip() は部分文字列ではなく文字のセットを除去する
strip() の引数は「文字列のまとまり」ではなく「除去する文字の集合」として扱われます。例えば strip("錦山") と指定すると、「錦」「山」のいずれかが端に続く限り除去します。プレフィックス・サフィックスをまとまりとして除去したい場合は removeprefix() または removesuffix()(Python 3.9以降)を使えます。
mistake1_ng.py
name = "桐生一馬"
result = name.strip("桐生")
print(result)
実行すると次のように出力されます。
python3 mistake1_ng.py 一馬
「桐生」という2文字の前置詞を除去しようとしたつもりが、「桐」と「生」のどちらかが先頭・末尾に続く限り除去されます。「一馬」の「馬」は対象外なので「一馬」が残ります。
mistake1_ok.py
name = "桐生一馬"
result = name.removeprefix("桐生")
print(result)
実行すると次のように出力されます。
python3 mistake1_ok.py 一馬
この例では結果が同じですが、removeprefix() は「桐生」というまとまりが先頭にある場合のみ除去するため、意図が明確です。
よくあるミス2: 中間の空白は strip() で除去できない
strip() は先頭・末尾の文字しか除去できません。文字列の途中にある余分な空白を除去したい場合は split() と join() を組み合わせて使えます。
mistake2_ng.py
text = "桐生 一馬 は 強い" print(text.strip())
実行すると次のように出力されます。
python3 mistake2_ng.py 桐生 一馬 は 強い
mistake2_ok.py
text = "桐生 一馬 は 強い" normalized = " ".join(text.split()) print(normalized)
実行すると次のように出力されます。
python3 mistake2_ok.py 桐生 一馬 は 強い
概要
『strip()』の引数 chars は部分文字列ではなく除去する「文字のセット」として扱われます。例えば『"abc".strip("ab")』は「"ab" というまとまり」を取り除くのではなく、「a または b」が端に続く限り取り除きます。プレフィックス・サフィックスとしてまとまりで除去したい場合は『removeprefix()』または『removesuffix()』(Python 3.9以降)を使えます。
これらのメソッドはすべて新しい文字列を返します。元の文字列は変更されません。ファイルを1行ずつ読み込む際は、行末の改行文字を除去するために『rstrip("\n")』や『rstrip()』が頻繁に使われます。
文字列の分割と組み合わせてデータクレンジングを行う場合は『str.split()』も参照してください。文字列の検索には『str.find() / str.index()』を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。