Pythonでファイル検索ツールを作成するためには、osモジュールやglobモジュールを使うと簡単にディレクトリ内のファイルを検索できます。またtkinterライブラリを使用することで、GUI(グラフィカルユーザーインターフェース)を通じてディレクトリ内のファイルを検索するツールを作成することができます。

ここでは、ディレクトリの選択、ファイル名または拡張子の指定、検索結果の表示を備えたファイル検索ツール作成を説明します。
以下で、各部分を詳しく説明します。
インポート文
import os
import tkinter as tk
from tkinter import filedialog, messagebox
説明:
os: ファイルシステムにアクセスするために使用され、ディレクトリの中を再帰的に探索してファイルを検索します。tkinter: PythonでGUIを構築するための標準ライブラリです。tkは短縮形として使われています。filedialog: ユーザーがファイルやフォルダを選択できるダイアログウィンドウを表示するために使用します。messagebox: エラーメッセージや通知を表示するためのモジュールです。
ファイル検索関数
# 指定されたディレクトリ内で指定された拡張子のファイルを再帰的に検索する関数
## 引数: directory (str): 検索するディレクトリのパス。
## file_extension (str): 検索したいファイル名または拡張子 (例: 'hoge.txt', '.txt', '.py')。
## 戻り値:list: 見つかったファイルのフルパスリスト。
def search_files(directory, file_extension):
found_files = []
for root, dirs, files in os.walk(directory):
for file in files:
if file.endswith(file_extension):
found_files.append(os.path.join(root, file))
return found_files
説明:
directory: ユーザーが指定する検索ディレクトリのパスです。file_extension: ファイル名または拡張子(例:hoge.txt,.txt,.py)を指定して、そのファイル名、または拡張子のファイルを検索します。os.walk(directory): 指定したディレクトリ内を再帰的に探索し、サブディレクトリも含めてすべてのファイルを取得します。root: 現在のディレクトリのパス。dirs: 現在のディレクトリ内にあるサブディレクトリのリスト。files: 現在のディレクトリ内にあるファイルのリスト。
file.endswith(file_extension): 各ファイルの拡張子が指定されたものと一致するかを確認します。os.path.join(root, file): ファイルの絶対パスを取得し、リストに追加します。- 最後に、見つかったファイルのフルパスリストを返します。
ディレクトリ選択ボタンの処理
# ディレクトリ選択ダイアログを開き、ユーザーに検索対象ディレクトリを選ばせる関数
def browse_directory():
directory = filedialog.askdirectory()
if directory:
entry_directory.delete(0, tk.END)
entry_directory.insert(0, directory)
説明:
filedialog.askdirectory(): ユーザーにディレクトリを選択させるためのダイアログボックスを表示します。ユーザーが選択したディレクトリのパスが返されます。entry_directory.delete(0, tk.END): エントリウィジェットに既に入力されている文字をクリアします。entry_directory.insert(0, directory): ユーザーが選択したディレクトリのパスをエントリウィジェットに挿入します。
検索ボタンの処理
# 検索を実行し、結果をリストボックスに表示する関数
def perform_search():
directory = entry_directory.get()
file_extension = entry_extension.get()
if not directory or not file_extension:
messagebox.showerror("エラー", "ディレクトリとファイル名、または拡張子を入力してください。")
return
result_listbox.delete(0, tk.END) # 前回の検索結果をクリア
# ファイルを検索
result = search_files(directory, file_extension)
if result:
for file in result:
result_listbox.insert(tk.END, file)
else:
messagebox.showinfo("結果", "ファイルが見つかりませんでした。")
説明:
entry_directory.get(): エントリウィジェットから、ユーザーが入力したディレクトリパスを取得します。entry_extension.get(): エントリウィジェットから、ユーザーが入力したファイルの拡張子を取得します。messagebox.showerror(): エラーメッセージを表示します。ディレクトリや拡張子が空の場合に使用されます。result_listbox.delete(0, tk.END): 前回の検索結果をリセットします。search_files(): 先ほど説明した関数を使って、指定されたディレクトリと拡張子でファイル検索を行います。result_listbox.insert(): 見つかったファイルをリストボックスに表示します。messagebox.showinfo(): ファイルが見つからなかった場合、情報メッセージを表示します。
GUIの作成部分
root = tk.Tk()
root.title("ファイル検索ツール")
label_directory = tk.Label(root, text="ディレクトリ:")
label_directory.grid(row=0, column=0, padx=10, pady=10)
entry_directory = tk.Entry(root, width=50)
entry_directory.grid(row=0, column=1, padx=10, pady=10)
button_browse = tk.Button(root, text="参照", command=browse_directory)
button_browse.grid(row=0, column=2, padx=10, pady=10)
label_extension = tk.Label(root, text="ファイル名または拡張子:")
label_extension.grid(row=1, column=0, padx=10, pady=10)
entry_extension = tk.Entry(root, width=10)
entry_extension.grid(row=1, column=1, padx=10, pady=10)
button_search = tk.Button(root, text="検索", command=perform_search)
button_search.grid(row=1, column=2, padx=10, pady=10)
result_listbox = tk.Listbox(root, width=80, height=20)
result_listbox.grid(row=2, column=0, columnspan=3, padx=10, pady=10)
root.mainloop()
説明:
tk.Tk(): メインウィンドウを作成します。root.title(): ウィンドウのタイトルを設定します。Label,Entry,Button:Labelはラベル、Entryはテキスト入力フィールド、Buttonはボタンを作成しています。grid(row=, column=): 各ウィジェットをウィンドウ内に配置します。
Listbox: 検索結果を表示するためのリストボックスです。列を3つ使って幅を広げています。root.mainloop(): このコードは、GUIのイベントループを開始します。ウィンドウが閉じられるまでプログラムが実行されます。
このプログラムでは、簡単にファイルを検索できるGUIツールを作成できます。
必要に応じて、複数の拡張子を検索したり、結果をファイルに保存する機能などを追加できます。




コメント