str.rstrip()
rstrip
は引数無しで使うと文字列の最後の空白を取り除いてくれます。
>>> x = " xxx "
>>> print "X" + x.rstrip() + "X"
X xxxX
こんな感じ。 引数には文字列を入れてあげることが出来て、
>>> x = "abcdefg"
>>> print x.rstrip("efg")
abcd
こんな感じで最後の方から見て与えた文字があれば消します。
が、ここで注意なのは、ここではefgという文字列を消してるわけではなく、 abcdefgという文字列の最後の文字から順に e、f、gのいずれかに当たる文字を探し、 もし該当すれば削除、しなければそこで作業終了、と言う事を行っています。
実際、
>>> x = "abcdefg"
>>> print x.rstrip("fge")
abcd
と、引数の文字列の順番を変えても同じ結果になります。
余計な文字を加えても、
>>> x = "abcdefg"
>>> print x.rstrip("zfge")
abcd
と同じ結果。
なので、例えばファイルの拡張子名なんかを消そうと、
name = filename.rstrip(".py")
とかすると、example.pyみたいな場合はexampleが得られて良いのですが、 pとかyが最後に来るような ap.pyみたいなファイル名だとaという名前が得られる事になります。
こういった場合にはreplace
を使って
name = filename.replace(".py", "")
等とした方が正しいです。
この場合は拡張子で、ファイル名の中に.pyなど、少なくとも.が
入る様な事は無いだろう、ということでこれでも良いのですが、
replace
だと文字列中どこでも変更してしまうので、
きちんとやるには
import re
name = re.sub("\.py$", "", filename);
みたいな感じでre
を使って正規表現できちんと末尾から取るようにする必要が
あります。
まとめ
上ではrstrip
について書いてますが、これは文字列の最初の方から削除する
lstrip
や両側から削除するstrip
にも同じ事がいえます。
自分の書いたコードをつらつらと見ていたら、 文字列から空白やクォート等、記号的な余計な物を削除しようとするところでは 正しく
y = x.strip('"\' ')
みたいな事をやってたりして理解してた感がありますし、 これを見たらそう言えばそうだったな、と思ったりもしました。
一方、拡張子を消す、的な所で上の様なrstrip
をしてしまってる所が
結構ありました。。。
かなり初歩的な所でかつ結構使う機会も多いものなんですが ひどいものです。。。