欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python+wxPython實(shí)現(xiàn)文件內(nèi)容搜索工具

 更新時(shí)間:2023年08月23日 08:43:00   作者:winfredzhang  
在本篇文章中,我們將介紹如何使用?wxPython?庫(kù)創(chuàng)建一個(gè)簡(jiǎn)單的文件搜索工具,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解一下

前言

在本篇文章中,我們將介紹如何使用 wxPython 庫(kù)創(chuàng)建一個(gè)簡(jiǎn)單的文件搜索工具。這個(gè)工具允許用戶(hù)選擇一個(gè)文件夾,并在該文件夾中的所有 .py 文件中查找指定的文字,并顯示匹配的位置。C:\pythoncode\blog\searchwordinpyfile.py

效果如下

代碼實(shí)現(xiàn)

我們首先導(dǎo)入必要的模塊:

import os
import wx

接下來(lái),我們定義一個(gè)名為 SearchFrame 的類(lèi),這個(gè)類(lèi)繼承自 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)建和布局代碼 ...
        # 綁定按鈕點(diǎn)擊事件
        self.folder_button.Bind(wx.EVT_BUTTON, self.on_select_folder)
        self.search_button.Bind(wx.EVT_BUTTON, self.on_search)
    # ... 省略其他事件處理函數(shù)的實(shí)現(xiàn) ...
# 創(chuàng)建應(yīng)用程序?qū)ο?
app = wx.App()
frame = SearchFrame(None, title="文件搜索")
frame.Show()
# 運(yùn)行應(yīng)用程序主循環(huán)
app.MainLoop()

以上代碼中,我們創(chuàng)建了一個(gè) SearchFrame 類(lèi),并在其構(gòu)造函數(shù)中初始化界面元素,并綁定了按鈕的點(diǎn)擊事件。接下來(lái),我們定義了兩個(gè)事件處理函數(shù) on_select_folder on_search ,分別用于處理選擇文件夾按鈕和搜索按鈕的點(diǎn)擊事件。

on_select_folder 函數(shù)中,我們使用 wx.DirDialog 創(chuàng)建了一個(gè)選擇文件夾的對(duì)話框,并獲取用戶(hù)選擇的文件夾路徑。

on_search 函數(shù)中,我們首先獲取用戶(hù)選擇的文件夾路徑和搜索文字,然后遍歷指定文件夾下的所有 .py 文件,打開(kāi)每個(gè)文件并讀取內(nèi)容,查找是否包含搜索文字,如果存在匹配,則記錄匹配的位置。

最后,我們創(chuàng)建了一個(gè) wxPython 的 App 對(duì)象,并創(chuàng)建了一個(gè) SearchFrame 實(shí)例,并顯示在界面上。通過(guò)調(diào)用 app.MainLoop() ,我們使程序進(jìn)入事件處理循環(huán),等待用戶(hù)的操作。

全部代碼

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)
        # 綁定按鈕點(diǎn)擊事件
        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ùn)行應(yīng)用程序主循環(huán)
app.MainLoop()

總結(jié)

通過(guò)使用 wxPython 庫(kù),我們創(chuàng)建了一個(gè)簡(jiǎn)單的文件搜索工具,實(shí)現(xiàn)了選擇文件夾、輸入搜索文字并點(diǎn)擊搜索按鈕的功能。在指定的文件夾中,我們遍歷了所有的 .py 文件,并查找包含搜索文字的位置,將結(jié)果顯示在界面上。

到此這篇關(guān)于Python+wxPython實(shí)現(xiàn)文件內(nèi)容搜索工具的文章就介紹到這了,更多相關(guān)Python wxPython文件內(nèi)容搜索內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python實(shí)現(xiàn)自定義異常堆棧信息的示例代碼

    Python實(shí)現(xiàn)自定義異常堆棧信息的示例代碼

    當(dāng)我們的程序報(bào)錯(cuò)時(shí),解釋器會(huì)將整個(gè)異常的堆棧信息全部輸出出來(lái)。解釋器會(huì)將異常產(chǎn)生的整個(gè)調(diào)用鏈都給打印出來(lái),那么問(wèn)題來(lái)了,我們能不能自定義這些報(bào)錯(cuò)信息呢?本文就來(lái)為大家詳細(xì)講講
    2022-07-07
  • 盤(pán)點(diǎn)20個(gè)Python數(shù)據(jù)科學(xué)庫(kù)神器打造數(shù)據(jù)魔法世界

    盤(pán)點(diǎn)20個(gè)Python數(shù)據(jù)科學(xué)庫(kù)神器打造數(shù)據(jù)魔法世界

    數(shù)據(jù)科學(xué)家和分析師常常使用?Python?來(lái)處理數(shù)據(jù)、進(jìn)行分析和可視化,Python生態(tài)系統(tǒng)中有許多庫(kù),但有一些庫(kù)是數(shù)據(jù)科學(xué)家日常工作中必不可少的,本文將深入介紹20個(gè)重要的Python?庫(kù),包括示例代碼和用例
    2024-01-01
  • Windows直接運(yùn)行python程序的兩種方法

    Windows直接運(yùn)行python程序的兩種方法

    本文主要介紹了Windows直接運(yùn)行python程序,包括新建bat腳本和新建vbs腳本,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-03-03
  • python實(shí)現(xiàn)bitmap數(shù)據(jù)結(jié)構(gòu)詳解

    python實(shí)現(xiàn)bitmap數(shù)據(jù)結(jié)構(gòu)詳解

    bitmap是很常用的數(shù)據(jù)結(jié)構(gòu),比如用于Bloom Filter中,下面是使用python實(shí)現(xiàn)bitmap數(shù)據(jù)結(jié)構(gòu)的代碼講解,需要的朋友可以參考下
    2014-02-02
  • Python爬豆瓣電影實(shí)例

    Python爬豆瓣電影實(shí)例

    本篇文章給大家通過(guò)Python爬豆瓣電影實(shí)例對(duì)Python爬蟲(chóng)更深入的講解,有興趣的學(xué)習(xí)下。
    2018-02-02
  • Python OpenCV一個(gè)窗口中顯示多幅圖像

    Python OpenCV一個(gè)窗口中顯示多幅圖像

    大家好,本篇文章主要講的是Python OpenCV一個(gè)窗口中顯示多幅圖像,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • Pandas保存csv數(shù)據(jù)的三種方式詳解

    Pandas保存csv數(shù)據(jù)的三種方式詳解

    CSV文件以純文本形式存儲(chǔ)表格數(shù)據(jù)(數(shù)字和文本),是一種通用的、相對(duì)簡(jiǎn)單的文件格式,被用戶(hù)、商業(yè)和科學(xué)廣泛應(yīng)用。本文介紹了三種Pandas保存CSV文件數(shù)據(jù)的方法,需要的可以參考一下
    2022-03-03
  • 在pytorch 中計(jì)算精度、回歸率、F1 score等指標(biāo)的實(shí)例

    在pytorch 中計(jì)算精度、回歸率、F1 score等指標(biāo)的實(shí)例

    今天小編就為大家分享一篇在pytorch 中計(jì)算精度、回歸率、F1 score等指標(biāo)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-01-01
  • 使用Python遍歷文件夾實(shí)現(xiàn)查找指定文件夾

    使用Python遍歷文件夾實(shí)現(xiàn)查找指定文件夾

    這篇文章主要為大家介紹了如何使用Python遍歷文件夾從而實(shí)現(xiàn)查找指定文件夾下所有相同名稱(chēng)的文件、所有相同后綴名的文件,感興趣的可以了解一下
    2022-07-07
  • 淺談一下Python究竟屬不屬于嵌入式語(yǔ)言

    淺談一下Python究竟屬不屬于嵌入式語(yǔ)言

    這篇文章主要介紹了淺談一下Python究竟屬不屬于嵌入式語(yǔ)言,大家普遍的認(rèn)為C與C++才是標(biāo)準(zhǔn)的嵌入式語(yǔ)言,那么現(xiàn)在大火的Python算是一種嵌入式語(yǔ)言嗎,需要的朋友可以參考下
    2023-04-04

最新評(píng)論