侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

python仿evething的文件搜索器实例代码

Python  /  管理员 发布于 7年前   348

今天看到everything搜索速度秒杀windows自带的文件管理器,所以特地模仿everything实现了文件搜索以及打开对应文件的功能,首先来一张搜索对比图。

这是evething搜索效果:

这是自己实现的效果:

主要功能就是python的os库的文件列表功能,sqllite创建表,插入数据以及模糊搜索,然后就是tkiner实现的界面功能。全部代码贴出来做一次记录,花费一天时间踩坑。

# coding=utf-8import tkinter as tkimport tkinter.messagebox #这个是消息框,对话框的关键import tkinter.constantsimport sqlite3import osimport threadingimport traceback def update_db():  print("更新数据库")  tkinter.messagebox.showerror("错误提示","更新数据库功能未完待续,可以删除目录下的allFiles.db文件,然后点击搜索,即可刷新数据库") def mouseCallBack(*args):  indexs = listb.curselection()  index = int(indexs[0])  print("index",index)  start_directory = str(myArr[index])  print(start_directory[2:-3])  os.startfile(start_directory[2:-3]) def obtain_all_files(filepath,cursor):#遍历filepath下所有文件,包括子目录 try:   files = os.listdir(filepath)   for fi in files:    fi_d = os.path.join(filepath,fi)    if os.path.isdir(fi_d):     obtain_all_files(fi_d,cursor)    else:     path = os.path.join(filepath,fi_d)     update_progress.set(path)     print("目录",path)     sqlAdd = "insert into filepath (file_path) values ('"+path+"')"     print("sqlAdd",sqlAdd)     cursor.execute(sqlAdd) except Exception as e:   traceback.print_exc()   print("扫描文件出异常了,点击确定继续扫描")   tkinter.messagebox.showerror("错误提示","扫描文件出异常了看,点击确定继续扫描")    def scan_file():  print("开始扫描文件") #  del myArr[:]  connection.execute("BEGIN TRANSACTION;") # 关键点  cursor = connection.cursor()  obtain_all_files('G:\\',cursor)  print("G盘扫描完成...")  tkinter.messagebox.showinfo("温馨提示","G盘扫描完成....")  connection.execute("COMMIT;") #关键点  connection.commit()  connection.close()  def insert_db():   t1 = threading.Thread(target=scan_file)   t1.setDaemon(True)   t1.start()   tkinter.messagebox.showinfo("温馨提示","正在更新数据库,请等待...") def search_file():   #表示创建一个数据库,并获得连接   print("数据库是否存在: ",isExistDB)   if(isExistDB==False):     tkinter.messagebox.showwarning("警告","数据库不存在,将更新数据库文件!")     try:       mycursor = connection.cursor()       file_sql = "create table filepath('file_path' text not null)"       mycursor.execute(file_sql)       mycursor.close()       insert_db()     except:       tkinter.messagebox.showerror("错误提示","数据库发生异常...")       return   else:     print("开始搜索")     listb.delete(0,tk.constants.END)     mycursor = connection.cursor()     entry_text = inputText.get()     search_sql = "select * from filepath where file_path like '%"+entry_text+"%'"     files = mycursor.execute(search_sql)     #tkinter.messagebox.showwarning("警告","没有找到对应的文件!")     for f in files:      print(f)      myArr.append(f)      listb.insert(tkinter.constants.END,f)     print("搜索完成")     mycursor.close() myArr = []isExistDB = os.path.exists("allFiles.db")connection = sqlite3.connect("allFiles.db",check_same_thread = False)root = tk.Tk() # 初始化Tk()root.title("电脑文件搜索工具(仿everything)By景兄弟V1.0")  # 设置窗口标题root.geometry("800x600")  # 设置窗口大小 注意:是x 不是*root.resizable(width=False, height=False) # 设置窗口是否可以变化长/宽,False不可变,True可变,默认为True#设置输入框inputText = tk.Entry(root,show=None,foreground = 'red',font = ('Helvetica', '15', 'bold'),insertbackground = 'green',width=65)inputText.pack()#设置按钮,以及放置的位置searchBtn = tk.Button(root, text="搜索", fg="blue",bd=2,width=10,command=search_file)#command中的方法带括号是直接执行,不带括号才是点击执行searchBtn.place(x=200, y=40, anchor='nw')updateBtn = tk.Button(root, text="更新数据库", fg="blue",bd=2,width=10,command=update_db)updateBtn.place(x=400, y=40, anchor='nw') update_progress = tk.StringVar()update_progress.set('还未开始扫描')lb = tk.Label(root,text="还未开始", fg="blue",bd=2,width=100, textvariable=update_progress)lb.place(x=20,y=90) listb = tk.Listbox(root,width=110,height=20)listb.place(x=1, y=120, anchor='nw')sb = tk.Scrollbar(root)  #垂直滚动条组件sb.pack(side=tkinter.constants.RIGHT,fill=tkinter.constants.Y) #设置垂直滚动条显示的位置listb.config(yscrollcommand=sb.set)listb.bind("<<ListboxSelect>>",mouseCallBack)root.mainloop() # 进入消息循环

以上所述是小编给大家介绍的python仿evething的文件搜索器详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对站的支持!


  • 上一条:
    python3 pygame实现接小球游戏
    下一条:
    python爬虫租房信息在地图上显示的方法
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 在windows10中升级go版本至1.24后LiteIDE的Ctrl+左击无法跳转问题解决方案(0个评论)
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客