演習問題
①inputディレクトリーに出欠が記載してあるファイルが存在します。
ファイルに出席の文字列があるか確認するsearch関数を作成しましょう。

"""出席かどうかの確認."""


def search(file_path, search_text):
    with open(file_path, encoding="utf-8") as f:  ファイルを開く
        if search_text in f.read():        ファイル名.read()でファイルの全体を文字列で読み込み、in演算子で指定したテキスト名が存在するか確認した。
            print(file_path)
    


if __name__ == '__main__':
    search('input/ito_0801.txt', '出席')
    search('input/sato_0801.txt', '出席')



②本問で、search(target_path, filename, search_text)関数を完成させましょう。
仮引数が変わっていることに注意してください。
前問との違いは、2箇所です。

target_pathとfilenameを連結して、対象のファイルパスとします。
ファイルパスの対象が、ファイルとは限らない場合もあります。
openする前に、ファイルであることを確認します。
※ 「search_textがファイル中に存在していれば、ファイル名を出力する」という処理は変わりません。


コード
"""出席者ファイルを取得する."""
import os


def search(target_path, filename, search_text):
    file_path = os.path.join(target_path,filename)
    if os.path.isfile(file_path):
        with open(file_path, encoding="utf-8") as f:
            if search_text in f.read():
                print(filename)


if __name__ == '__main__':
    search('input', 'ito_0801.txt', '出席')
    search('input', 'sato_0801.txt', '出席')
    search('input', 'NOT FILE NAME', '出席')


解説
ファイルかどうかを判別するには os.path.isfile(ファイル名)
in演算子で指定の文字列がファイルに入っているか判別している





ディレクトリー内のファイルや子ディレクトリーのリストはos.listdir関数で取得できます。
子ディレクトリー内も検索する場合はos.walk関数を使います。

ファイルpathを作成するときの流れ
https://pyq.jp/quests/module_os_exercise/try/#