import PySimpleGUI as sg
from pathlib import Path
import os
title = "ファイルorフォルダ名からキーワード検索"
folder_p = r"C:\Users\~~~~~\Desktop"
def find_word(folder_p, findword, regex, is_file_only):
"""
ファイ名またはファイルパス全体から文字列を検索する
Para
---------------------------------
folder_p :str、検索対象のフォルダフルパス
findword :str、検索するキーワード
regex :str、カレントのみ or サブフォルダを含む
is_file_only :boolean、ファイルだけを検索 or フォルダパスも含めて検索
Return
---------------------------------
msg :str、検索結果
"""
filelist = [str(p) for p in Path(folder_p).glob(regex)]
filelist = sorted(filelist)
cnt, msg = 0, ""
if is_file_only:
for file_p in filelist:
if findword in os.path.basename(file_p):
cnt += 1
msg += f'{file_p}\n'
else:
for file_p in filelist:
if findword in file_p:
cnt += 1
msg += f'{file_p}\n'
msg = f'ファイル数 = {cnt}\n{msg}'
return msg
def execute():
folder_p = values["-Folder_p-"]
findword = values["-Findword-"]
regex = '**/*.*'if (values['-Recursive-'] == True) else '*.*'
is_file_only = values["-Is_file_only-"]
msg = find_word(folder_p, findword, regex, is_file_only)
window["text1"].update(msg)
layout = [[sg.Text("読み込みフォルダ", size=(14,1)),
sg.Input(folder_p, key="-Folder_p-", expand_x=True),sg.FolderBrowse("選択"), sg.B("開く")],
[sg.Text("検索文字", size=(14,1)), sg.Input("", key="-Findword-", size=(20,1)),
sg.Checkbox('サブフォルダも検索', default=False, enable_events=True, key='-Recursive-'),
sg.Checkbox('ファイル名のみ検索', default=True, enable_events=True, key='-Is_file_only-'),
],
[sg.Button("実行", size=(20,1), pad=(5,15), bind_return_key=True)],
[sg.Multiline(key="text1", size=(60,10), horizontal_scroll=True, expand_x=True, expand_y=True)]]
window = sg.Window(title, layout, font=('Meiryo UI',12), resizable=True)
while True:
event, values = window.read()
print(event, values)
if event == None:
break
if event == "実行":
execute()
window.close()