Python+wxPython實現(xiàn)文件內(nèi)容搜索工具
前言
在本篇文章中,我們將介紹如何使用 wxPython 庫創(chuàng)建一個簡單的文件搜索工具。這個工具允許用戶選擇一個文件夾,并在該文件夾中的所有 .py 文件中查找指定的文字,并顯示匹配的位置。C:\pythoncode\blog\searchwordinpyfile.py
效果如下

代碼實現(xiàn)
我們首先導(dǎo)入必要的模塊:
import os import wx
接下來,我們定義一個名為 SearchFrame 的類,這個類繼承自 wx.Frame ,用于創(chuàng)建搜索工具的主窗口。
class SearchFrame(wx.Frame):
def __init__(self, parent, title):
super(SearchFrame, self).__init__(parent, title=title, size=(400, 400))
# 創(chuàng)建界面元素
self.panel = wx.Panel(self)
# ... 省略其他界面元素的創(chuàng)建和布局代碼 ...
# 綁定按鈕點擊事件
self.folder_button.Bind(wx.EVT_BUTTON, self.on_select_folder)
self.search_button.Bind(wx.EVT_BUTTON, self.on_search)
# ... 省略其他事件處理函數(shù)的實現(xiàn) ...
# 創(chuàng)建應(yīng)用程序?qū)ο?
app = wx.App()
frame = SearchFrame(None, title="文件搜索")
frame.Show()
# 運行應(yīng)用程序主循環(huán)
app.MainLoop()以上代碼中,我們創(chuàng)建了一個 SearchFrame 類,并在其構(gòu)造函數(shù)中初始化界面元素,并綁定了按鈕的點擊事件。接下來,我們定義了兩個事件處理函數(shù) on_select_folder 和 on_search ,分別用于處理選擇文件夾按鈕和搜索按鈕的點擊事件。
在 on_select_folder 函數(shù)中,我們使用 wx.DirDialog 創(chuàng)建了一個選擇文件夾的對話框,并獲取用戶選擇的文件夾路徑。
在 on_search 函數(shù)中,我們首先獲取用戶選擇的文件夾路徑和搜索文字,然后遍歷指定文件夾下的所有 .py 文件,打開每個文件并讀取內(nèi)容,查找是否包含搜索文字,如果存在匹配,則記錄匹配的位置。
最后,我們創(chuàng)建了一個 wxPython 的 App 對象,并創(chuàng)建了一個 SearchFrame 實例,并顯示在界面上。通過調(diào)用 app.MainLoop() ,我們使程序進(jìn)入事件處理循環(huán),等待用戶的操作。
全部代碼
import os
import wx
class SearchFrame(wx.Frame):
def __init__(self, parent, title):
super(SearchFrame, self).__init__(parent, title=title, size=(400, 400))
# 創(chuàng)建界面元素
self.panel = wx.Panel(self)
self.folder_button = wx.Button(self.panel, label="選擇文件夾")
self.search_label = wx.StaticText(self.panel, label="搜索文字:")
self.search_text = wx.TextCtrl(self.panel)
self.search_button = wx.Button(self.panel, label="搜索")
self.memo = wx.TextCtrl(self.panel, style=wx.TE_MULTILINE)
# 設(shè)置界面布局
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(self.folder_button, 0, wx.ALL, 5)
sizer.Add(self.search_label, 0, wx.ALL, 5)
sizer.Add(self.search_text, 0, wx.EXPAND|wx.ALL, 5)
sizer.Add(self.search_button, 0, wx.ALL, 5)
sizer.Add(self.memo, 1, wx.EXPAND|wx.ALL, 5)
self.panel.SetSizer(sizer)
# 綁定按鈕點擊事件
self.folder_button.Bind(wx.EVT_BUTTON, self.on_select_folder)
self.search_button.Bind(wx.EVT_BUTTON, self.on_search)
def on_select_folder(self, event):
dialog = wx.DirDialog(self, "選擇文件夾", style=wx.DD_DEFAULT_STYLE)
if dialog.ShowModal() == wx.ID_OK:
folder_path = dialog.GetPath()
self.folder_button.SetLabel(folder_path)
dialog.Destroy()
def on_search(self, event):
folder_path = self.folder_button.GetLabel()
search_text = self.search_text.GetValue()
matches = []
# 遍歷指定文件夾下的所有 .py 文件
for root, dirs, files in os.walk(folder_path):
for file in files:
if file.endswith(".py"):
file_path = os.path.join(root, file)
with open(file_path, "r", encoding="utf-8") as f:
content = f.read()
if search_text in content:
match_positions = [pos for pos in range(len(content)) if content.startswith(search_text, pos)]
matches.append((file_path, match_positions))
# 在 Memo 組件中顯示找到的文件名和文字位置
# self.memo.Clear()
for match in matches:
file_path, positions = match
self.memo.AppendText(f"文件名: {file_path}\n")
for position in positions:
self.memo.AppendText(f"文字位置: {position}\n")
self.memo.AppendText("\n")
# 創(chuàng)建應(yīng)用程序?qū)ο?
app = wx.App()
frame = SearchFrame(None, title="文件搜索")
frame.Show()
# 運行應(yīng)用程序主循環(huán)
app.MainLoop()總結(jié)
通過使用 wxPython 庫,我們創(chuàng)建了一個簡單的文件搜索工具,實現(xiàn)了選擇文件夾、輸入搜索文字并點擊搜索按鈕的功能。在指定的文件夾中,我們遍歷了所有的 .py 文件,并查找包含搜索文字的位置,將結(jié)果顯示在界面上。
到此這篇關(guān)于Python+wxPython實現(xiàn)文件內(nèi)容搜索工具的文章就介紹到這了,更多相關(guān)Python wxPython文件內(nèi)容搜索內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python pandas 重命名索引和列名稱的實現(xiàn)
本文主要介紹了Python pandas 重命名索引和列名稱的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
Python實現(xiàn)平行坐標(biāo)圖的兩種方法小結(jié)
今天小編就為大家分享一篇Python實現(xiàn)平行坐標(biāo)圖的兩種方法小結(jié),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07
詳解Python函數(shù)可變參數(shù)定義及其參數(shù)傳遞方式
這篇文章主要介紹了詳解Python函數(shù)可變參數(shù)定義及其參數(shù)傳遞方式的相關(guān)資料,這里提供實例代碼幫助大家學(xué)習(xí)理解這部分內(nèi)容,需要的朋友可以參考下2017-08-08
po+selenium+unittest自動化測試項目實戰(zhàn)
本文主要介紹了po+selenium+unittest自動化測試項目實戰(zhàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-12-12
Python實現(xiàn)將橫表和縱表任意轉(zhuǎn)換的兩種方法
在日常做數(shù)據(jù)分析,接收到最多的表格是縱表,每個字段變量都有很長數(shù)據(jù)的長表,我們稱之為縱向數(shù)據(jù),但是,有時候,我們也會遇到橫表,對于橫向數(shù)據(jù),我們會數(shù)據(jù)轉(zhuǎn)化,將其轉(zhuǎn)化為縱向數(shù)據(jù),感興趣的同學(xué)跟著小編一起來學(xué)習(xí)吧2023-12-12

