🐍 Python
str.startswith(prefix) / str.endswith(suffix)
文字列の先頭または末尾が指定した文字列と一致するかを判定するメソッドです。ファイルの拡張子チェックやURLのプロトコル判定など、条件分岐の第一歩としてよく使われます。
構文: str.startswith(prefix, start=0, end=len(str))
str.endswith(suffix, start=0, end=len(str))
戻り値: True または False
基本の使い方
URLがhttpsかhttpかを判定する例です。
url = "https://example.com"
print(url.startswith("https://")) # True
print(url.startswith("http://")) # False
複数候補をタプルでまとめて判定する
引数にタプルを渡すと、「いずれかに一致すればTrue」という判定になります。orで何度も条件を書く必要がなくなります。
fname = "report.pdf"
print(fname.endswith((".pdf", ".docx"))) # True
start・end引数で判定範囲を絞る
findやcountと同様に、開始位置・終了位置を指定して判定範囲を文字列の一部に限定できます。
s = "filename.tar.gz"
print(s.endswith(".gz", 0, 15)) # True(15文字目までの範囲で判定)
実用例:拡張子でファイルを絞り込む
リスト内包表記と組み合わせて、特定の拡張子のファイルだけを抽出する定番パターンです。
files = ["a.py", "b.txt", "c.py", "readme.md"]
py_files = [f for f in files if f.endswith(".py")]
print(py_files) # ['a.py', 'c.py']
パラメータ
- prefix / suffix
- 判定したい文字列。文字列単体のほか、タプルで複数候補をまとめて指定できる
- start・end(省略可)
- 判定対象とする文字列内の範囲。スライスと同じ考え方
💡 in演算子との使い分け
「先頭・末尾が特定の文字列か」を調べたいならstartswith/endswithが最適です。「文字列のどこかに含まれているか」だけを調べたいならin演算子を使います。AIが生成したコードで拡張子判定に".py" in fnameと書かれていたら、それはfnameの途中に".py"が含まれていればTrueになってしまい、"a.pyc"のような意図しないファイルも拾ってしまうバグになり得ます。