使用python来进行多线程文件高速查找

该代码示例展示了一个基于Python和Qt库的文件搜索应用,它模拟了Everything的高速查找功能。通过在UI界面上输入关键字,程序能在多个磁盘上并行搜索匹配的文件,并实时显示搜索结果。搜索过程利用线程进行,以保证界面的响应性。
摘要由CSDN通过智能技术生成

一、功能

        模拟Everything,通过python+UI来实现可视化文件的高速查找。

二、运行效果

三、代码

import os
import threading
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QLineEdit, QTextBrowser, QPushButton, QComboBox
from PyQt5.QtGui import QFont
from PyQt5.QtCore import Qt, pyqtSignal, QObject


class FileSearchThread(QObject):
    search_result_found = pyqtSignal(str)
    search_finished = pyqtSignal()

    def __init__(self, disk, search_text):
        super().__init__()
        self.disk = disk
        self.search_text = search_text
        self.found_files = []

    def search_files(self):
        for root, dirs, files in os.walk(self.disk):
            for file in files:
                if self.search_text.lower() in file.lower():
                    file_path = os.path.join(root, file)
                    self.found_files.append(file_path)
                    self.search_result_found.emit(file_path)

        self.search_finished.emit()


class FileSearchApp(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('文件搜索')
        self.setGeometry(200, 600, 1340, 800)

        self.search_label = QLabel("搜索关键字:")
        self.search_label.setFont(QFont('Arial', 12))
        self.search_textbox = QLineEdit()
        self.search_textbox.setFont(QFont('Arial', 12))

        self.search_button = QPushButton('搜索')
        self.search_button.setFont(QFont('Arial', 12))
        self.search_button.clicked.connect(self.start_search)


        self.search_results = QTextBrowser()
        self.search_results.setFont(QFont('Arial', 12))
        self.search_status_label = QLabel()
        self.search_status_label.setFont(QFont('Arial', 12))

        layout = QVBoxLayout()
        layout.addWidget(self.search_label)
        layout.addWidget(self.search_textbox)
        layout.addWidget(self.search_button)
        layout.addWidget(self.search_status_label)
        layout.addWidget(self.search_results)
        self.setLayout(layout)

    def start_search(self,disks):
        disks= ['C:','D:','E:','F:']   #本地电脑的磁盘列表
        search_text = self.search_textbox.text()
        # print(disk)
        self.search_results.clear()
        self.search_status_label.setText("正在搜索...")
        self.search_status_label.adjustSize()
        for disk in disks:
            if disk and search_text:
                file_search_thread = FileSearchThread(disk, search_text)
                file_search_thread.search_result_found.connect(self.display_result)
                file_search_thread.search_finished.connect(self.search_finished)

                self.worker_thread = threading.Thread(target=file_search_thread.search_files)
                self.worker_thread.start()

    def display_result(self, file_path):
        self.search_results.append(file_path)

    def search_finished(self):
        self.search_status_label.setText("搜索完成")
        self.search_status_label.adjustSize()
        self.worker_thread.join()


if __name__ == '__main__':
    app = QApplication([])
    file_search_app = FileSearchApp()
    file_search_app.show()
    app.exec_()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值