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()