キーワードを含むファイル名を探す

投稿者: | 2023-02-12

https://github.com/miwadee3153/PYTHON/blob/a7edddd0af51c9eb3183b5ec6384a665ab51f0a6/search_file.py

import pathlib
import re
import sys

ERR_MSG = f'USAGE: >python {sys.argv[0]} search_path "filename_key1" "key2" ...'

nargs = len(sys.argv)
search_path = pathlib.Path(sys.argv[1])

def main(search_path: str, *args):

    """
    指定フォルダ配下を再帰的に検索し、ファイル名に含まれるキーワードで検索

    :Returns:   None
    :Params:    search_path:    str
                *args           str(keyword of filename)
    """
    if nargs < 3:
        print(" At least 3 args are required", "\n", ERR_MSG)
        sys.exit()

    if not search_path.exists():
        print(" No Such Path", "\n", ERR_MSG)
        sys.exit()

    filename_keys = sys.argv[2:]
    print(f'{filename_keys=}')

    # 正規表現 「〜を含み かつ 〜を含む」:'^(?=.*STR)(?=.*STR).*$' の形へ
    regex = "^" + "".join(["(?=.*" + k + ')'for k in filename_keys]) + ".*$"
    pattern = re.compile(regex)

    print(f'\n検索フォルダ:{search_path}\n検索キー:{filename_keys}\n検索結果:\n')

    for fullpath in search_path.glob("**/*"):
        m = pattern.search(fullpath.name)
        if m:
            print(f'{fullpath.name}\n{fullpath}\n{"-"*30}')
        else:
            pass

if '__name__' == __main__:
    main()