読者です 読者をやめる 読者になる 読者になる

dackdive's blog

新米webエンジニアによる技術ブログ。JavaScript(React), Salesforce, Python など

follow us in feedly

[python]strip()の引数を省略すると空白だけでなく改行も除去される

Python 小ネタ

文字列の先頭と末尾から指定した文字を除去する strip([chars]) というメソッド
これ、引数を指定しないと空白文字を除去するというのを今日知りました。

# 引数指定
>>> 'www.example.com'.strip('cmowz.')
'example'

# 引数なし
>>> '     www.example.com    '.strip()
'www.example.com'

公式ドキュメントによると

5. 組み込み型 — Python 2.7ja1 documentation

文字列の先頭および末尾部分を除去したコピーを返します。引数 chars は除去される文字集合を指定する文字列です。 chars が省略されるか None の場合、空白文字が除去されます。 chars 文字列は接頭語でも接尾語でもなく、そこに含まれる文字の組み合わせ全てがはぎ取られます。

というわけで文字列の前後の半角スペースを除去するのかーぐらいで捉えてたんですが
改行も除去してくれることがわかり

>>> print '\nhello'

hello
# \nも除去される
>>> print '\nhello'.strip()
hello

改行とは書かれていないのになんで?と気になったので
"python 空白文字" で調べてみるとこちらの公式ドキュメントが見つかりました。

7.1. string — 一般的な文字列操作 — Python 2.7ja1 documentation

空白 (whitespace) として扱われる文字全てを含む文字列です。ほとんどのシステムでは、これはスペース (space)、タブ (tab)、改行 (linefeed)、復帰 (return)、改頁 (formfeed)、垂直タブ (vertical tab) です。

つまり、引数なし strip() が除去するのは "空白" でなく "空白文字" だから、というわけ。

ためしに、

>>> import string
>>> string.whitespace
'\t\n\x0b\x0c\r '

とすると \n とか \r が含まれているのが確認できました。
\x0b\x0c は垂直タブ(\v)や改頁(\f)の16進数表記っぽい)

リファレンス

strip()split() について非常に詳しく説明されています
Python初学者に贈るPythonのコード分析(strip()とかsplit()とかitemgetter()とか) | ゆうじの日記

"空白文字" について、こちらにも書かれてました
文字列から文字を除去 - nelnal@python - pythonグループ

改行コードについて
pythonにおける改行コード、改めて調べてまとめてみた。多分pythonだけじゃないけど。--listen2the Silence