演習問題
①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/#