最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于PyQt5自制簡單的文件內(nèi)容檢索小工具

 更新時(shí)間:2023年05月19日 09:05:19   作者:Python 集中營  
這篇文章主要為大家詳細(xì)介紹了如何基于PyQt5自制一個(gè)簡單的文件內(nèi)容檢索小工具,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

好久沒有更新過PyQt5相關(guān)的專題了,今天正好有空就做一個(gè)文件、文件內(nèi)容檢索的小工具。

目的是為了能夠很快的完成的在任意磁盤路徑下找到我們需要的文件、或是包含某關(guān)鍵詞內(nèi)容的文件。

實(shí)現(xiàn)過程依舊是采用我們比較熟悉的PyQt5來完成應(yīng)用程序的制作,接下來直接進(jìn)入正題。

有新來的小伙伴沒有安裝PyQt5的小伙伴可以選擇pip或其他的方式安裝該模塊。

pip?install?PyQt5?-i?https://mirrors.tuna.tsinghua.edu.cn/help/pypi/

下面我們先可以制作一個(gè)PyQt5的UI界面,創(chuàng)建一個(gè)FileSearchUI類,將UI界面布局、組件及相關(guān)的槽函數(shù)都放到這個(gè)類中來開發(fā)。

#?導(dǎo)入PyQt5.QtGui模塊
from?PyQt5.QtGui?import?*

#?導(dǎo)入PyQt5.QtCore模塊
from?PyQt5.QtCore?import?*

#?導(dǎo)入PyQt5.QtWidgets模塊
from?PyQt5.QtWidgets?import?*

#?系統(tǒng)處理模塊
import?sys

#?文件處理操作模塊
import?os

#?導(dǎo)入異常處理模塊
import?traceback

#?正則表達(dá)式匹配模塊
import?re

import?images

class?FileSearchUI(QWidget):
????def?__init__(self):
????????super(FileSearchUI,?self).__init__()
????????self.resize(600,?400)
????????self.setWindowTitle('文件內(nèi)容檢索器?公眾號(hào):Python 集中營')
????????self.setWindowIcon(QIcon(':/analysis.ico'))

????????self.target_search_dir?=?QLineEdit()
????????self.target_search_dir.setPlaceholderText('目標(biāo)搜索目錄')
????????self.target_search_dir.setReadOnly(True)

????????self.target_search_btn?=?QPushButton()
????????self.target_search_btn.setText('瀏覽')
????????self.target_search_btn.clicked.connect(self.target_search_btn_clk)

????????self.search_text?=?QLineEdit()
????????self.search_text.setPlaceholderText('請(qǐng)輸入搜索內(nèi)容...')

????????self.search_btn?=?QPushButton()
????????self.search_btn.setText('開始搜索')
????????self.search_btn.clicked.connect(self.search_btn_clk)

????????self.brower?=?QTextBrowser()
????????self.brower.setReadOnly(True)
????????self.brower.setFont(QFont('宋體',?8))
????????self.brower.setPlaceholderText('日志處理過程區(qū)域...')
????????self.brower.ensureCursorVisible()

????????grid?=?QGridLayout()
????????grid.addWidget(self.target_search_dir,?0,?0,?1,?2)
????????grid.addWidget(self.target_search_btn,?0,?2,?1,?1)
????????grid.addWidget(self.search_text,?1,?0,?1,?3)
????????grid.addWidget(self.search_btn,?2,?0,?1,?3)
????????grid.addWidget(self.brower,?3,?0,?1,?3)

????????self.thread_?=?WorkThread(self)
????????self.thread_.message.connect(self.show_message)
????????self.thread_.finished.connect(self.finished)

????????self.setLayout(grid)

????def?show_message(self,?text):
????????cursor?=?self.brower.textCursor()
????????cursor.movePosition(QTextCursor.End)
????????self.brower.append(text)
????????self.brower.setTextCursor(cursor)
????????self.brower.ensureCursorVisible()

????def?target_search_btn_clk(self):
????????target_path?=?QFileDialog.getExistingDirectory(self,?'選擇文件夾',?os.getcwd())
????????self.target_search_dir.setText(target_path)

????def?search_btn_clk(self):
????????self.thread_.start()
????????self.search_btn.setEnabled(False)

????def?finished(self,?text):
????????if?text?is?True:
????????????self.search_btn.setEnabled(True)

至此,我們已經(jīng)完成了檢索小工具應(yīng)用的UI界面的布局、組件以及相關(guān)的槽函數(shù)的事件點(diǎn)擊操作。

該應(yīng)用的UI界面展示效果如下:

上述代碼塊已經(jīng)實(shí)現(xiàn)了應(yīng)用的界面功能,下面就是業(yè)務(wù)邏輯的實(shí)現(xiàn)了,通常為了不影響主線程的運(yùn)行都會(huì)使用專門的子線程來執(zhí)行業(yè)務(wù)邏輯。

這里我們創(chuàng)建一個(gè)繼承自QThread的WorkThread類用于實(shí)現(xiàn)文件內(nèi)容檢索的真正功能。

import?chardet
from?chardet.universaldetector?import?UniversalDetector


class?WorkThread(QThread):
????finished?=?pyqtSignal(bool)
????message?=?pyqtSignal(str)

????def?__init__(self,?parent=None):
????????super(WorkThread,?self).__init__(parent)
????????self.parent?=?parent
????????self.working?=?True

????def?__del__(self):
????????self.working?=?True

????def?run(self):
????????try:
????????????target_search_dir?=?self.parent.target_search_dir.text().strip()
????????????search_text?=?self.parent.search_text.text().strip()
????????????if?target_search_dir?==?'':
????????????????self.message.emit('目標(biāo)檢索路徑不能為空!')
????????????elif?search_text?==?'':
????????????????self.message.emit('檢索內(nèi)容不能為空!')

????????????self.message.emit('已設(shè)置目標(biāo)檢索路徑:')
????????????self.message.emit(target_search_dir)
????????????self.message.emit('已設(shè)置檢索內(nèi)容:')
????????????self.message.emit(search_text)

????????????file_name_con_list?=?[]
????????????file_current_list?=?[]

????????????for?dirpath,?dirnames,?filenames?in?os.walk(target_search_dir):
????????????????for?filename?in?filenames:
????????????????????if?search_text?in?filename:
????????????????????????if?os.path.join(dirpath,?filename)?not?in?file_name_con_list:
????????????????????????????file_name_con_list.append(os.path.join(dirpath,?filename))

????????????????????detector?=?UniversalDetector()
????????????????????with?open(os.path.join(dirpath,?filename),?'rb')?as?f:
????????????????????????for?line?in?f:
????????????????????????????detector.feed(line)
????????????????????????????if?detector.done:
????????????????????????????????break
????????????????????????detector.close()
????????????????????????if?detector.result['encoding']?is?not?None?and?detector.result['encoding']?==?'utf-8':
????????????????????????????current_?=?f.read().decode('utf-8')
????????????????????????????if?search_text?in?current_:
????????????????????????????????file_current_list.append(os.path.join(dirpath,?filename))

????????????self.message.emit('文件名稱包含關(guān)鍵字的文件路徑:')
????????????self.message.emit('\n'.join(file_name_con_list))
????????????self.message.emit('文件內(nèi)容包含關(guān)鍵字的文件路徑:')
????????????self.message.emit('\n'.join(file_current_list))

????????????self.message.emit('文件內(nèi)容檢索全部完成!')
????????????self.finished.emit(True)
????????except:
????????????traceback.print_exc()
????????????self.message.emit('程序運(yùn)行錯(cuò)誤,請(qǐng)檢查參數(shù)設(shè)置是否正常!')
????????????self.finished.emit(True)

如上述WorkThread類的代碼塊就是全部的業(yè)務(wù)實(shí)現(xiàn)邏輯,我們?cè)谧x取文件判斷時(shí)使用的二進(jìn)制的文件讀取方式。

之后,將二進(jìn)制的字符串解碼成utf-8的文本字符串再進(jìn)行搜索匹配并將文件路徑發(fā)送到主線程的UI界面日志中。

最后則使用python模塊的main函數(shù)將整個(gè)應(yīng)用完成啟動(dòng)即可。

if?__name__?==?'__main__':
????app?=?QApplication(sys.argv)
????main?=?FileSearchUI()
????main.show()
????sys.exit(app.exec_())

下面檢索小工具在搜索過程的運(yùn)行效果展示:

小伙伴們可以將上述所有源代碼復(fù)制到自己的開發(fā)工具中或打包成exe應(yīng)用程序即可成功啟動(dòng)應(yīng)用。

到此這篇關(guān)于基于PyQt5自制簡單的文件內(nèi)容檢索小工具的文章就介紹到這了,更多相關(guān)PyQt5文件內(nèi)容檢索工具內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python獲取列表值的方法小結(jié)

    Python獲取列表值的方法小結(jié)

    在?Python?編程中,列表(list)是一種非常常見且強(qiáng)大的數(shù)據(jù)結(jié)構(gòu),本文將通過簡潔明了的方式,結(jié)合代碼和案例,介紹如何獲取列表中的值,需要的可以了解下
    2024-11-11
  • python3+selenium獲取頁面加載的所有靜態(tài)資源文件鏈接操作

    python3+selenium獲取頁面加載的所有靜態(tài)資源文件鏈接操作

    這篇文章主要介紹了python3+selenium獲取頁面加載的所有靜態(tài)資源文件鏈接操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • 用tensorflow構(gòu)建線性回歸模型的示例代碼

    用tensorflow構(gòu)建線性回歸模型的示例代碼

    本篇文章主要介紹了用tensorflow構(gòu)建線性回歸模型的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-03-03
  • Python基于Socket實(shí)現(xiàn)的簡單聊天程序示例

    Python基于Socket實(shí)現(xiàn)的簡單聊天程序示例

    這篇文章主要介紹了Python基于Socket實(shí)現(xiàn)的簡單聊天程序,結(jié)合簡單實(shí)例形式分析了Python聊天程序的客戶端與服務(wù)器端相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-08-08
  • 基于Python制作一個(gè)文件解壓縮工具

    基于Python制作一個(gè)文件解壓縮工具

    經(jīng)常由于各種壓縮格式的不一樣用到文件的解壓縮時(shí)就需要下載不同的解壓縮工具去處理不同的文件。本文將用Python制作一個(gè)解壓縮小工具,以后再也不用下載各種格式的解壓縮軟件了
    2022-05-05
  • python 實(shí)現(xiàn)tar文件壓縮解壓的實(shí)例詳解

    python 實(shí)現(xiàn)tar文件壓縮解壓的實(shí)例詳解

    這篇文章主要介紹了python 實(shí)現(xiàn)tar文件壓縮解壓的實(shí)例詳解的相關(guān)資料,這里提供實(shí)現(xiàn)方法,幫助大家學(xué)習(xí)理解這部分內(nèi)容,需要的朋友可以參考下
    2017-08-08
  • 實(shí)例分析python3實(shí)現(xiàn)并發(fā)訪問水平切分表

    實(shí)例分析python3實(shí)現(xiàn)并發(fā)訪問水平切分表

    在本文中小編給大家整理了關(guān)于python3實(shí)現(xiàn)并發(fā)訪問水平切分表的相關(guān)知識(shí)點(diǎn)以及實(shí)例代碼,有興趣的朋友們參考下。
    2018-09-09
  • Python基礎(chǔ)之?dāng)?shù)據(jù)類型詳解

    Python基礎(chǔ)之?dāng)?shù)據(jù)類型詳解

    python的數(shù)值類型包括整數(shù),浮點(diǎn)數(shù),復(fù)數(shù),集合,小數(shù)和分?jǐn)?shù),布爾值.它們都是python中的數(shù)值類型.如果是有過其他語言編寫經(jīng)驗(yàn)的人,一定很好奇,浮點(diǎn)數(shù)和小數(shù)的區(qū)別是什么?文中有非常詳細(xì)的介紹,需要的朋友可以參考下
    2021-06-06
  • python實(shí)現(xiàn)基本進(jìn)制轉(zhuǎn)換的方法

    python實(shí)現(xiàn)基本進(jìn)制轉(zhuǎn)換的方法

    這篇文章主要介紹了python實(shí)現(xiàn)基本進(jìn)制轉(zhuǎn)換的方法,涉及Python數(shù)學(xué)運(yùn)算的取余與字符串操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • Pytorch如何加載部分權(quán)重

    Pytorch如何加載部分權(quán)重

    這篇文章主要介紹了Pytorch如何加載部分權(quán)重問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09

最新評(píng)論

长葛市| 甘孜| 九龙城区| 定兴县| 尚志市| 嘉鱼县| 定兴县| 北流市| 柏乡县| 定南县| 乐昌市| 平利县| 双峰县| 阿瓦提县| 华池县| 朝阳县| 台北县| 万山特区| 大埔县| 绥棱县| 土默特左旗| 伊吾县| 黄平县| 西平县| 彰化市| 永善县| 普兰店市| 望谟县| 杭锦后旗| 海门市| 伊宁县| 开原市| 稻城县| 元江| 鹤岗市| 军事| 腾冲县| 依安县| 唐河县| 资中县| 太白县|