Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで文字列の先頭・末尾を判定する方法!startswith()とendswith()の使い方を徹底解説

Pythonでプログラミングをしていると、「文字列が特定のテキストで始まっているか」「特定のテキストで終わっているか」を確認したい場面によく出会います。代表的な例としては、ファイル名の拡張子(.txt や .csv など)のチェックですが、URL のプロトコル確認など、応用範囲は非常に広いです。

この記事では、Python標準の startswith() メソッドと endswith() メソッドを使った文字列の先頭・末尾判定の方法を、具体的なコード例とともにわかりやすく解説します。さらに、複数のパターンを同時にチェックするテクニックや、よくあるエラーへの対処法も紹介します。

startswith()メソッドで文字列の先頭を判定する

文字列の先頭が特定のテキストと一致するかどうかを確認する最もシンプルな方法は、startswith() メソッドを使うことです。このメソッドは、指定した文字列で始まっていれば True、そうでなければ False を返します。

基本構文

text = "Is USA colder than Australia?"
print(f"output \n {text.startswith('Is')}")

実行結果

True

ファイル名のチェック例

ファイル名が特定の文字列で始まるかどうかの確認にも使えます。

filename = "Hello_world.txt"
print(f"output \n {filename.startswith('Hello')}")

実行結果

True

URLのプロトコル確認例

URLが「http:」で始まるかどうかをチェックしてみましょう。

site_url = 'https://www.something.com'
print(f"output \n {site_url.startswith('http:')}")

実行結果

False

「https://」は「http:」とは異なるため False が返されます。「https:」で判定するとどうなるでしょうか。

print(f"output \n {site_url.startswith('https:')}")

実行結果

True

endswith()メソッドで文字列の末尾を判定する

逆に、文字列の末尾が特定のテキストと一致するかどうかを確認するには、endswith() メソッドを使用します。使い方は startswith() とまったく同じです。

基本構文

text = "Is USA colder than Australia?"
print(f"output \n {text.endswith('?')}")

実行結果

True

拡張子のチェック例

ファイル名の拡張子を確認するのは、endswith() の最も一般的な用途の一つです。

filename = "Hello_world.txt"
print(f"output \n {filename.endswith('.txt')}")

実行結果

True

複数のパターンを同時にチェックする方法

startswith()endswith() は、引数にタプルを渡すことで、複数の候補を一度にチェックできます。例えば、ディレクトリ内にある「.txt」と「.csv」ファイルだけを抽出したい場合を見てみましょう。

ディレクトリ内のファイル一覧を取得する

import os
filenames = os.listdir('.')

該当ファイルが存在するか確認する

# ファイルが存在するかどうかをチェック
print(f"output \n {any(name.endswith(('.csv', '.txt')) for name in filenames)}")

実行結果

True

該当するファイル名だけをリストで取得する

リスト内包表記と組み合わせれば、条件に合うファイル名だけをまとめて取り出せます。

[name for name in filenames if name.endswith(('.csv', '.txt'))]

実行結果

['file1.csv',
'HRDataset.csv',
'Input.csv',
'input.txt',
'input_copy.txt',
'movies_data.csv',
'my_html_data_to_csv.csv',
'temporary_file1_for_zip.csv',
'temporary_file2_for_zip.csv',
'test.csv',
'test1.txt',
'test2.txt',
'tmdb_5000_movies.csv']

注意点:リストではなくタプルを渡す

ここで重要なポイントがあります。startswith()endswith() が受け付けるのは文字列またはタプルのみです。リストをそのまま渡すとエラーになります。

エラーになるコード例

import os

# リストで候補を定義
patterns = ['.csv', '.txt']

# ファイル名を取得
filenames = os.listdir('.')

# ファイルの存在をチェック
any(name.endswith(patterns) for name in filenames)

実行結果(エラー)

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
in
      8
      9 # Let us first check if there are files
---> 10 any(name.endswith(patters) for name in filenames)

TypeError: endswith first arg must be str or a tuple of str, not list

このように TypeError が発生します。エラーメッセージにもある通り、「endswith の第一引数は文字列か文字列のタプルである必要がある」ためです。

解決策:tuple()でリストをタプルに変換する

リストで候補を管理したい場合は、tuple() 関数を使ってタプルに変換してから渡しましょう。

# ファイルの存在をチェック
any(name.endswith(tuple(patterns)) for name in filenames)

実行結果

True

同様に、ファイル名を抽出する場合もタプルへ変換します。

[name for name in filenames if name.endswith(tuple(patterns))]

実行結果

['file1.csv',
'HRDataset.csv',
'Input.csv',
'input.txt',
'input_copy.txt',
'movies_data.csv',
'my_html_data_to_csv.csv',
'temporary_file1_for_zip.csv',
'temporary_file2_for_zip.csv',
'test.csv',
'test1.txt',
'test2.txt',
'tmdb_5000_movies.csv']

他の処理との組み合わせでより実用的に

startswith()endswith() は、データの絞り込みなどの他の操作と組み合わせると真価を発揮します。例えば、条件に合うファイルが存在する場合にのみ特定の処理を実行する、といった書き方ができます。

if文との組み合わせ例

if any(name.endswith(tuple(patterns)) for name in filenames):
    # ここに実行したい処理を記述
    pass

まとめ

  • startswith():文字列の先頭が指定したテキストと一致するかを判定する
  • endswith():文字列の末尾が指定したテキストと一致するかを判定する
  • 両メソッドとも戻り値はブール値(True / False
  • 複数パターンをチェックする場合はタプルで渡す(リストは不可)
  • any() やリスト内包表記と組み合わせると、ファイル検索などの実務で非常に便利

これらのメソッドはPythonの文字列操作の基本であり、正規表現を使うほどでもない単純な前方一致・後方一致の判定に最適です。ぜひ日々のコーディングに取り入れてみてください。

  1. Javaの正規表現(RegEx)で入力の末尾を一致させる方法

    Javaの正規表現では、メタ文字「\z」を使用することで、入力の末尾(終わり)を一致させることができます。 「\z」は入力全体の最後を表すアンカーであり、パターンが文字列の末尾でマッチするかどうかを判定する際に便利です。例えば、入力された文字列が数字で終わっているかどうかを確認したい場合などに活用できます。 サンプルコード import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Example { public static void

  2. Pythonでクリップボードのテキストを貼り付ける方法を解説!pyperclipの使い方

    Pythonには数多くの組み込みライブラリやモジュールが用意されており、さまざまなアプリケーション開発において追加機能を簡単に実装できます。その中でもpyperclipは、クロスプラットフォームに対応したPythonモジュールの一つで、どのOS環境でもコピー&ペースト操作を実現できる便利なライブラリです。pyperclipを使用するには、まず以下のコマンドでインストールします。pip install pyperclippyperclipの実用的な活用例pyperclipの実践的な使い方として、クリップボードからテキストを読み取り、画面に表示するアプリケーションが挙げられます。さらに、ユーザーの