当前位置: 首页 > news >正文

自制python搜索小工具,比电脑自带的还要快

目录

  • 前言
  • 环境准备
  • 完整代码

前言

嗨嗨,大家晚上好 ~
当自己电脑文件很多还有点乱,不记得自己文件放哪里的时候,用电脑自带的搜索文件,这个等待时间可慢了

请添加图片描述

对我们这种敲代码的,这能忍吗,所以我们不如自己用python做一个搜索工具!犄角旮旯的文件都能一秒钟搜索出来的那种!
一不小心还能把你们男(女)朋友那些藏的很深的不可告人的文件分分钟找出来~

话不多说,赶紧开始吧

请添加图片描述

环境准备

  1. 解释器: Python 3.8.8 | Anaconda, Inc.
  2. 编辑器: pycharm 专业版

不会安装的可以私信我哦 😎

完整代码

就不把代码单列出来咯,一次全放出来 ~
我在里面写了注释哦

请添加图片描述

需要源码、教程,或者是自己有关python不懂的问题,都可以来这里哦 https://jq.qq.com/?_wv=1027&k=j1rUTY72 这里还有学习资料与免费课程领取

import tkinter as tk
from tkinter import filedialog
import os

root = tk.Tk()
root.geometry('600x300')
root.title('学习资料搜索工具')

"""搜索框"""
search_frame = tk.Frame(root)
search_frame.pack()

tk.Label(search_frame, text='关键字:').pack(side=tk.LEFT, padx=10, pady=10)
key_entry = tk.Entry(search_frame)  # 创建一个输入框
key_entry.pack(side=tk.LEFT, padx=10, pady=10)  # 将输入框显示到界面
tk.Label(search_frame, text='文件类型:').pack(side=tk.LEFT, padx=10, pady=10)
type_entry = tk.Entry(search_frame)
type_entry.pack(side=tk.LEFT, padx=10, pady=10)
button = tk.Button(search_frame, text='搜索')
button.pack(side=tk.LEFT, padx=10, pady=10)
list_box = tk.Listbox(root)
list_box.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)

"""点击按钮搜索文件"""


def search():
    print('按钮被点击了')
    # 1. 获取关键字、文件类型
    key = key_entry.get()
    file_type = type_entry.get()
    print(key, file_type)
    # 2. 读取 windows 系统的文件
    dir_path = filedialog.askdirectory()
    print(dir_path)  # 遍历文件,实现搜索功能
    file_list = os.walk(dir_path)
    for root_path, dirs, files in file_list:
        # 目录路径,目录下的子目录,目录下的文件
        # print(root_path, dirs, files)
        for file in files:
            # 过滤文件类型,搜索关键字
            if type_entry:  # py 如果输入了类型,就进行过滤,如果没有输入,就不过滤类型
                if file.endswith(file_type):
                    # 搜索关键字
                    content = open(root_path + '/' + file, mode='r', encoding='utf-8-sig').read()
                    if key in content:
                        print(root_path + '/' + file)
                        # 把结果显示到界面上
                        list_box.insert(tk.END, root_path + '/' + file)
    # 3. 实现搜索功能
    # 4. 将搜索到的结果显示到界面


# 创建滚动窗口并布局到页面上
sb = tk.Scrollbar(root)
sb.pack(side=tk.RIGHT, fill=tk.Y)
sb.config(command=list_box.yview)
list_box.config(yscrollcommand=sb.set)

button.config(command=search)


def list_click(event):
    print('列表框组件的内容被点击了')
    # 1. 获取到选中的内容
    index = list_box.curselection()[0]
    path = list_box.get(index)
    print(path)
    # 2. 读取选中路径的内容
    content = open(path, mode='r', encoding='utf-8').read()
    print(content)
    # 3. 将内容显示到新的窗口
    top = tk.Toplevel(root)
    filename = path.split('/')[-1]
    top.title(filename)
    text = tk.Text(top)
    text.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
    text.insert(tk.END, content)


# 绑定点击事件
list_box.bind('<Double-Button-1>', list_click)

root.mainloop()

好啦,今天的分享到这里就结束了 ~
感兴趣的朋友赶紧去试一下,嘿嘿

对文章有问题的,或者有其他关于python的问题,可以在评论区留言或者私信我哦
觉得我分享的文章不错的话,可以关注一下我,或者给文章点赞(/≧▽≦)/

请添加图片描述

相关文章:

  • 计算机之计算文件占用簇数
  • Cookie跨域以及Cookie共享问题
  • Java类的概念|包括封装、继承、多态|以及成员方法、权限修饰符、this关键字等类的相关的概念知识|Java必学知识点
  • 怎么让机器认识你的手势?机器学习方向
  • Vue项目实战——【基于 Vue3.x + Vant UI】实现一个多功能记账本(登录注册页面,验证码)
  • 【Java面试】概念性的问题怎么答,看完高手的回答一口气答出完整思路,Nosql的理解
  • React初体验-Hello React的组件化方式-React入门小案例
  • 【毕业设计】树莓派单片机墨水屏电子日历系统 - 物联网 嵌入式
  • SEH异常之编译器原理探究
  • UniApp调用SDK原生接口
  • 【数字信号调制】基于PCM编码和QAM调制系统附matlab代码
  • 数字科技对零售业的改造,链动2+1模式系统如何颠覆传统?
  • 集成随机惯性权重和差分变异操作的樽海鞘群算法-附代码
  • A Lightweight and Accurate Recognition Framework for Signs of X-ray Weld Images
  • 【小程序】IDEA实现qq邮件的发送
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • GitUp, 你不可错过的秀外慧中的git工具
  • JS专题之继承
  • Python学习之路16-使用API
  • vue--为什么data属性必须是一个函数
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 动态规划入门(以爬楼梯为例)
  • 简单基于spring的redis配置(单机和集群模式)
  • 解析 Webpack中import、require、按需加载的执行过程
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 排序算法之--选择排序
  • 如何进阶一名有竞争力的程序员?
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 王永庆:技术创新改变教育未来
  • 写给高年级小学生看的《Bash 指南》
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • #在 README.md 中生成项目目录结构
  • $refs 、$nextTic、动态组件、name的使用
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (4)Elastix图像配准:3D图像
  • (70min)字节暑假实习二面(已挂)
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (简单) HDU 2612 Find a way,BFS。
  • (离散数学)逻辑连接词
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (循环依赖问题)学习spring的第九天
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (转)大型网站的系统架构
  • .Net Remoting(分离服务程序实现) - Part.3
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .NET 中让 Task 支持带超时的异步等待
  • .vue文件怎么使用_vue调试工具vue-devtools的安装
  • // an array of int
  • ?php echo $logosrc[0];?,如何在一行中显示logo和标题?
  • @FeignClient注解,fallback和fallbackFactory
  • @Not - Empty-Null-Blank
  • [ACTF2020 新生赛]Upload 1
  • [APIO2015]巴厘岛的雕塑