本記事では、Pythonでのendswithメソッドの使い方を解説します。endswithを使うことで文字列の末尾に特定の文字列があるかの判定ができます。
endswithとは
Pythonの文字列メソッドendswith()は、文字列が特定の接尾辞(サフィックス)で終わっているかどうかを確認するために使用されます。このメソッドは、指定された文字列が特定のパターンで終わる場合はTrue、そうでない場合はFalseを返します。ファイル名の拡張子チェックやテキスト処理などで役立つメソッドです。
構文
string.endswith(suffix[, start[, end]])
パラメータ:
- suffix: 検索する接尾辞。文字列または接尾辞のタプルを指定できます
- start: オプションの開始位置(デフォルトは0)
- end: オプションの終了位置(デフォルトは文字列の長さ)
戻り値:
- 文字列が指定された接尾辞で終わる場合はTrue
- それ以外の場合はFalse
例
基本的な使い方
最初に「hello.txt」という文字列が「.txt」で終わるかを確認しています。終わっているのでTrueが返されます。次に「document.pdf」が「.txt」で終わるかを確認していますが、終わっていないのでFalseが返されます。
text = "hello.txt"
result = text.endswith(".txt")
print(result) # True
another_text = "document.pdf"
result = another_text.endswith(".txt")
print(result) # False
複数の接尾辞をチェックする
タプルをわたすことで複数の接尾辞をチェックできます。ここでは、「report.docx」という文字列が「.doc」「.docx」「.pdf」のいずれかで終わるかをチェックしています。「.docx」で終わっているのでTrueが返されます。一方、「photo.jpg」はこれらの接尾辞のどれでも終わっていないため、Falseが返されます。
filename = "report.docx"
# タプルを使って複数の拡張子をチェック
is_document = filename.endswith((".doc", ".docx", ".pdf"))
print(is_document) # True
image = "photo.jpg"
is_document = image.endswith((".doc", ".docx", ".pdf"))
print(is_document) # False
開始位置と終了位置を指定する
「Python programming is fun」という文字列の一部が特定の文字列で終わるかを確認しています。最初の例では、インデックス0から6までの部分文字列「Python」が「on」で終わるかをチェックしており、Trueが返されます。2つ目の例では、インデックス0から10までの部分文字列「Python pro」が「on」で終わるかをチェックしていますが、終わっていないのでFalseが返されます。
text = "Python programming is fun"
# 最初の6文字だけをチェック
result = text.endswith("on", 0, 6)
print(result) # True
# 最初の10文字をチェック
result = text.endswith("on", 0, 10)
print(result) # False
実用的な例:ファイル拡張子のチェック
ファイル名が画像ファイルの拡張子で終わるかをチェックする関数を定義しています。lower()メソッドを使って文字列を小文字に変換してから、大文字小文字を区別せずに拡張子をチェックしています。そして、与えられたファイルリストから画像ファイルだけをフィルタリングしています。結果として、「vacation.jpg」と「profile.PNG」が画像ファイルとして抽出されます。
def is_image_file(filename):
return filename.lower().endswith((".jpg", ".jpeg", ".png", ".gif"))
files = ["vacation.jpg", "document.pdf", "profile.PNG", "notes.txt"]
image_files = [file for file in files if is_image_file(file)]
print(image_files) # ['vacation.jpg', 'profile.PNG']
注意点
大文字と小文字の区別
「Hello.TXT」が「.txt」で終わるかをチェックしています。endswith()メソッドは大文字と小文字を区別するため、最初の例ではFalseが返されます。大文字小文字を区別せずに比較したい場合は、lower()やupper()メソッドを使って文字列を変換してから比較する必要があります。
text = "Hello.TXT"
result = text.endswith(".txt")
print(result) # False
# 大文字小文字を区別しない比較
result = text.lower().endswith(".txt")
print(result) # True
タプルの使い方
endswith()メソッドのsuffixパラメータに異なる型を渡した場合の動作を示しています。文字列を渡す場合は問題なく動作しますが、リストを渡すとTypeErrorが発生します。複数の接尾辞をチェックしたい場合は、必ずタプルを使用する必要があります。
extensions = ".txt" # 文字列
filename = "document.txt"
# これは動作します
result = filename.endswith(extensions)
print(result) # True
extensions = [".txt", ".pdf"] # リスト
# これはエラーになります
try:
result = filename.endswith(extensions)
except TypeError as e:
print(f"エラー: {e}") # エラー: expected string or bytes-like object, got list
# タプルを使う
extensions = (".txt", ".pdf") # タプル
result = filename.endswith(extensions)
print(result) # True
まとめ
Pythonのendswith()メソッドは、文字列が特定の接尾辞で終わるかどうかを簡単に確認できる便利なメソッドです。基本的な使い方から、複数の接尾辞のチェック、開始位置と終了位置の指定まで、様々な用途に対応できます。特にファイル処理や文字列の検証などでよく使われるこのメソッドは、Pythonプログラミングにおける重要なツールの一つと言えるでしょう。効率的なコードを書くために、ぜひマスターしておきたいメソッドです。