Pythonのfindメソッド完全マスター!10つの実用的サンプルコードで学ぶ

Pythonのfindメソッドを学ぶ初心者向けイラストPython

 

【当サイトはコードのコピペ・商用利用OKです】

このサービスはASPや、個別のマーチャント(企業)による協力の下、運営されています。

記事内のコードは基本的に動きますが、稀に動かないことや、読者のミスで動かない時がありますので、お問い合わせいただければ個別に対応いたします。

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればカスタムコードを使って機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10000時間以上』を満たすプログラマ集団によって監修されています。

はじめに

皆さん、こんにちは。

今日はPythonの便利なメソッドの一つ、findメソッドについて詳しく解説します。

これは、ある文字列の中から特定の単語やフレーズを探すときに使用します。

本記事では10つの実用的なサンプルコードを通じてfindメソッドの使い方を学び、Pythonプログラミングのスキルを一歩前進させましょう。

●Pythonのfindメソッドとは

findメソッドはPythonのstrクラスのメソッドで、ある文字列(検索対象文字列)の中に別の文字列(検索文字列)が最初に出現する位置を返します。

存在しない場合、戻り値は-1となります。

○基本的な使い方

findメソッドの基本的な形は次の通りです。

str.find(sub[, start[, end]])

ここで、

  • strは検索対象文字列です。
  • subは検索文字列です。
  • startとendはオプションの検索範囲を指定するための整数です。startは検索を始める位置、endは検索を終える位置を示します。

●findメソッドの詳細な使い方

それでは、具体的なサンプルコードとともに、findメソッドの使い方を見ていきましょう。

○サンプルコード1:基本的な文字列検索

このコードでは、「Python」を含む文字列から「thon」を検索します。

この例では、findメソッドを使用して、文字列’Python’の中で’thon’が最初に出現する位置を検索します。

text = 'Python'
position = text.find('thon')
print(position)

このコードを実行すると、’thon’は’Python’の中で位置2から始まるため、「2」が出力されます。

○サンプルコード2:検索開始位置の指定

次に、検索を開始する位置を指定する方法を見てみましょう。

text = 'I love Python. Python is fun.'
position = text.find('Python', 10)
print(position)

このコードでは、「I love Python. Python is fun.」という文字列から、位置10から検索を開始し、「Python」を探します。

このコードを実行すると、二番目の「Python」が見つかり、その位置「13」が出力されます。

○サンプルコード3:検索終了位置の指定

さらに、検索を終了する位置を指定する方法もあります。

text = 'I love Python. Python is fun.'
position = text.find('Python', 0, 10)
print(position)

このコードでは、「I love Python. Python is fun.」という文字列から位置0から位置10までの間で「Python」を探します。

この範囲内で最初の「Python」が見つかり、その位置「7」が出力されます。

●findメソッドの応用例

この章では、Pythonのfindメソッドを使ってさまざまな応用例を見ていきましょう。

具体的なコード例を通じて、findメソッドの実践的な使用法を把握することで、あなたのPythonスキルは更に向上することでしょう。

○サンプルコード4:複数の単語を検索

このコードでは、複数の単語を検索する例を表します。

単一の文字列に対してfindメソッドを複数回使用することで、複数の単語の位置をそれぞれ調べることができます。

text = "Pythonはシンプルで読みやすいプログラミング言語です。"

word_list = ['Python', 'シンプル', 'プログラミング']
for word in word_list:
    position = text.find(word)
    print(f"'{word}'の位置:{position}")

上記のコードでは、word_listに含まれる各単語に対してfindメソッドを使用しています。

forループを使ってリスト内の各単語を順番に検索し、その位置を表示しています。

○サンプルコード5:リスト内の文字列検索

次に、リスト内の各要素に対して文字列検索を行う方法を見てみましょう。

リスト内の各要素に対して文字列検索を行う場合も、findメソッドを用いて対応できます。

word_list = ['Pythonはシンプルな言語', 'Javaはオブジェクト指向', 'Rubyは動的型付け']
target_word = 'は'

for text in word_list:
    position = text.find(target_word)
    print(f"'{target_word}'の位置:{position}")

上記のコードでは、word_listに含まれる各文字列に対してfindメソッドを使用しています。

forループを使ってリスト内の各文字列を順番に検索し、その位置を表示しています。

○サンプルコード6:ファイル内の文字列検索

findメソッドはファイル内の特定の文字列を検索する際にも非常に有用です。

下記のコードでは、テキストファイル内で特定の文字列を検索してその位置を表示しています。

filename = 'sample.txt'
target_word = 'Python'

with open(filename, 'r') as f:
    text = f.read()
    position = text.find(target_word)
    print(f"'{target_word}'の位置:{position}")

この例では、ファイルを開いて全ての内容を読み込み、その後findメソッドを使用して特定の文字列を検索しています。

○サンプルコード7:複数のファイルから文字列を検索

さらに、複数のファイルから特定の文字列を検索する例も見てみましょう。

filenames = ['sample1.txt', 'sample2.txt', 'sample3.txt']
target_word = 'Python'

for filename in filenames:
    with open(filename, 'r') as f:
        text = f.read()
        position = text.find(target_word)
        print(f"'{target_word}'の位置({filename}):{position}")

このコードでは、複数のファイル名をリストとして格納し、それぞれのファイルを順に開いて特定の文字列を検索しています。

○サンプルコード8:条件分岐とfindメソッド

findメソッドと条件分岐を組み合わせると、特定の文字列が存在するかどうかに応じて異なる処理を行うことができます。

text = "Pythonはシンプルで読みやすいプログラミング言語です。"
target_word = 'Python'

position = text.find(target_word)
if position != -1:
    print(f"'{target_word}'が見つかりました。位置は{position}です。")
else:
    print(f"'{target_word}'は見つかりませんでした。")

このコードでは、findメソッドを使用して文字列を検索し、その結果に応じて異なるメッセージを表示しています。

findメソッドが-1を返す場合、それは指定した文字列が見つからなかったことを意味します。

○サンプルコード9:ループとfindメソッド

findメソッドとループを組み合わせることで、文字列内の同じ単語が複数存在する場合にその全てを見つけることができます。

text = "Pythonはシンプルで読みやすいプログラミング言語で、Pythonは人気があります。"
target_word = 'Python'

position = -1
while True:
    position = text.find(target_word, position + 1)
    if position != -1:
        print(f"'{target_word}'の位置:{position}")
    else:
        break

このコードでは、whileループとfindメソッドを組み合わせて、文字列内の特定の単語が複数回出現する場合のそれぞれの位置を見つけています。

○サンプルコード10:findメソッドを使用したwebスクレイピング

findメソッドは、webスクレイピングにも有効に活用できます。

下記のコードは、HTMLコードから特定のタグを見つける簡単な例です。

import requests

url = 'https://www.example.com'
response = requests.get(url)
html = response.text

start_tag = '<title>'
end_tag = '</title>'
start_position = html.find(start_tag)
end_position = html.find(end_tag)

if start_position != -1 and end_position != -1:
    title = html[start_position+len(start_tag): end_position]
    print(f"ページタイトル:{title}")

このコードでは、指定されたURLのHTMLを取得し、findメソッドを使用して<title></title>タグの位置を見つけ、その間のテキスト(ページタイトル)を取得しています。

●findメソッドの注意点と対処法

Pythonのfindメソッドは非常に便利ですが、使用する際にはいくつか注意点があります。

その注意点と、それに対応するための方法について具体的に見ていきましょう。

○注意点1:見つからなかった場合の戻り値

findメソッドを使用するとき、最もよく遭遇する問題の一つが、探している文字列が見つからなかった場合です。

文字列が見つからない場合、findメソッドは-1を返します。

これに注意しないと、意図しない結果を得ることがあります。

具体的なサンプルコードとその結果を見てみましょう。

text = "Pythonの世界へようこそ"
target_word = "Java"
position = text.find(target_word)
print(f"'{target_word}'の位置:{position}")

このコードでは、’Pythonの世界へようこそ’という文字列から’Java’という単語を探しています。

しかし、’Java’はこの文字列に含まれていないため、findメソッドは-1を返します。

実行結果:

'Java'の位置:-1

このように、見つからない場合の戻り値は-1となります。

○対処法1:戻り値のチェック

この問題に対処するためには、findメソッドの戻り値をチェックし、-1が返された場合には適切に処理を行うことが重要です。

下記のコードでは、findメソッドの戻り値が-1かどうかをチェックし、-1が返された場合はメッセージを表示するようにしています。

text = "Pythonの世界へようこそ"
target_word = "Java"
position = text.find(target_word)
if position == -1:
    print(f"'{target_word}'は見つかりませんでした。")
else:
    print(f"'{target_word}'の位置:{position}")

実行結果:

'Java'は見つかりませんでした。

このように、findメソッドの戻り値が-1かどうかを確認することで、目的の文字列が存在しない場合の処理を適切に行うことができます。

○注意点2:検索開始位置の指定

findメソッドを使用する際には、検索を開始する位置を指定することができます。

しかし、検索開始位置を間違えると、意図しない結果を得ることがあります。

具体的なサンプルコードとその結果を見てみましょう。

text = "Pythonの世界へようこそ、Pythonは楽しい言語です。"
target_word = "Python"
position = text.find(target_word, 10)
print(f"'{target_word}'の位置:{position}")

このコードでは、’Pythonの世界へようこそ、Pythonは楽しい言語です。’という文字列から、10文字目から’Python’という単語を探しています。

しかし、10文字目から始めると、最初の’Python’は見つけることができません。

実行結果:

'Python'の位置:12

このように、開始位置を間違えると、予期せぬ結果を得ることがあります。

○対処法2:開始位置の調整

この問題に対処するためには、検索開始位置を正しく設定することが重要です。

下記のコードでは、最初から検索を開始し、’Python’が2回目に出てくる位置を探すために、1回目に見つかった位置+1を開始位置として設定しています。

text = "Pythonの世界へようこそ、Pythonは楽しい言語です。"
target_word = "Python"
first_position = text.find(target_word)
second_position = text.find(target_word, first_position + 1)
print(f"'{target_word}'の2回目の位置:{second_position}")

実行結果:

'Python'の2回目の位置:12

このように、開始位置を適切に設定することで、正確な検索結果を得ることができます。

これらの注意点と対処法を理解することで、findメソッドをより効果的に使用することができます。

●findメソッドのカスタマイズ方法

findメソッドは、特定の文字列を探す際に大いに役立ちますが、その実用性をさらに広げるために、いくつかのカスタマイズ方法を学ぶことができます。

下記の例では、findメソッドを使用して特定の文字列のインデックスを取得し、そのインデックスを利用してさらに処理を進めます。

○例1:文字列の一部を取得する

この例では、findメソッドを使って特定の文字列のインデックスを取得し、そのインデックスを基に特定の部分文字列を取得します。

対象の文字列が’Hello, World!’で、’World’の部分のみを取得するコードを作成してみましょう。

s = 'Hello, World!'
index = s.find('World')
substring = s[index:index+5]
print(substring)

このコードでは、まずfindメソッドを使用して’World’の開始インデックスを取得します。

そして、スライスを用いて取得したインデックスから5文字分の部分文字列を取得します。

このコードを実行すると、’World’という結果が得られます。

○例2:文字列の一部を置換する

次に、findメソッドを使用して特定の文字列のインデックスを取得し、そのインデックスを基に特定の部分文字列を別の文字列に置換する例を見てみましょう。

s = 'Hello, World!'
index = s.find('World')
new_s = s[:index] + 'Python' + s[index+5:]
print(new_s)

この例では、findメソッドを使って’World’の開始インデックスを取得します。

そして、そのインデックスを基に文字列をスライスし、’World’の部分を’Python’に置換します。

このコードを実行すると、’Hello, Python!’という結果が得られます。

このように、findメソッドは特定の文字列のインデックスを取得するだけでなく、そのインデックスを基にさまざまな操作を行うことで、より広範で複雑なタスクを達成することが可能になります。

次に、例3で紹介するカスタマイズ方法では、findメソッドの第二引数と第三引数を活用して特定の範囲で文字列を検索する方法を学びましょう。

○例3:特定の範囲で文字列を検索する

s = 'Hello, World! World!'
index = s.find('World', 10, 20)
print(index)

この例では、findメソッドの第二引数と第三引数に数値を指定することで、特定の範囲で文字列を検索します。

このコードを実行すると、最初の’World’をスキップし、2つ目の’World’のインデックスである13が出力されます。

以上の例を通じて、findメソッドをカスタマイズして利用することで、プログラムの多様性と柔軟性が増し、より複雑な問題に対応することができるようになります。

まとめ

この記事では、Pythonのfindメソッドの基本的な使い方から、注意点、さらにはカスタマイズ方法までを初心者向けに詳細に解説しました。

サンプルコードと共に学ぶことで、理論だけではなく実践的な理解も深まったことでしょう。

特に、findメソッドのカスタマイズ方法は、文字列操作の幅を広げるための重要な手段であり、より高度なプログラミングタスクに取り組む際には必須の知識となります。

Pythonの学習を進める中で、findメソッドを活用することで、プログラムの効率と柔軟性を高め、より高度なプログラミングスキルを習得することが可能となります。

これからもPythonプログラミングの学習を続け、次のレベルへとステップアップしていきましょう。