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


Posted in Python onMay 13, 2019

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

这是evething搜索效果:

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

这是自己实现的效果:

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

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

# coding=utf-8
import tkinter as tk
import tkinter.messagebox #这个是消息框,对话框的关键
import tkinter.constants
import sqlite3
import os
import threading
import 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的文件搜索器详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
python使用电子邮件模块smtplib的方法
Aug 28 Python
Python编程产生非均匀随机数的几种方法代码分享
Dec 13 Python
python3.5基于TCP实现文件传输
Mar 20 Python
Django进阶之CSRF的解决
Aug 01 Python
python 使用matplotlib 实现从文件中读取x,y坐标的可视化方法
Jul 04 Python
Python实现TCP通信的示例代码
Sep 09 Python
Python连接字符串过程详解
Jan 06 Python
pycharm不以pytest方式运行,想要切换回普通模式运行的操作
Sep 01 Python
浅析Python 责任链设计模式
Sep 11 Python
细说NumPy数组的四种乘法的使用
Dec 18 Python
Django对接elasticsearch实现全文检索的示例代码
Aug 02 Python
Python实现制作销售数据可视化看板详解
Nov 27 Python
python爬虫租房信息在地图上显示的方法
May 13 #Python
详解如何设置Python环境变量?
May 13 #Python
详解python运行三种方式
May 13 #Python
OpenCV图像颜色反转算法详解
May 13 #Python
搞清楚 Python traceback的具体使用方法
May 13 #Python
Python3+OpenCV2实现图像的几何变换(平移、镜像、缩放、旋转、仿射)
May 13 #Python
Python 通过打码平台实现验证码的实现
May 13 #Python
You might like
使用 eAccelerator加速PHP代码的目的
2007/03/16 PHP
简单示例AJAX结合PHP代码实现登录效果代码
2008/07/25 PHP
通过JavaScript或PHP检测Android设备的代码
2011/03/09 PHP
php中json_encode中文编码问题分析
2011/09/13 PHP
thinkphp如何获取客户端IP
2015/11/03 PHP
php实现映射操作实例详解
2019/10/02 PHP
NodeJS框架Express的模板视图机制分析
2011/07/19 NodeJs
NodeJS与Mysql的交互示例代码
2013/08/18 NodeJs
javascript实现表格增删改操作实例详解
2015/05/15 Javascript
JS实现的验证身份证及获取地区功能示例
2017/01/16 Javascript
JS鼠标滚动分页效果示例
2017/07/05 Javascript
js模拟百度模糊搜索的实例
2017/08/04 Javascript
基于jQuery选择器之表单对象属性筛选选择器的实例
2017/09/19 jQuery
详解json串反转义(消除反斜杠)
2019/08/12 Javascript
JavaScrip如果基于url实现图片下载
2020/07/03 Javascript
[15:20]DOTA2亚洲邀请赛总决赛开幕式表演:羽泉献唱
2017/04/05 DOTA
python实现监控windows服务并自动启动服务示例
2014/04/17 Python
Pandas DataFrame数据的更改、插入新增的列和行的方法
2019/06/25 Python
Python循环中else,break和continue的用法实例详解
2019/07/11 Python
Django缓存系统实现过程解析
2019/08/02 Python
pycharm双击无响应(打不开问题解决办法)
2020/01/10 Python
查看keras的默认backend实现方式
2020/06/19 Python
python使用matplotlib绘制折线图的示例代码
2020/09/22 Python
python实现AdaBoost算法的示例
2020/10/03 Python
关于css兼容性问题及一些常见问题汇总
2016/05/03 HTML / CSS
HTML5实现QQ聊天气泡效果
2017/06/26 HTML / CSS
耐克波兰官方网站:Nike波兰
2019/09/03 全球购物
建筑公司文秘岗位职责
2013/11/29 职场文书
会计专业自荐信
2013/12/02 职场文书
人事部岗位职责范本
2014/03/05 职场文书
党员公开承诺践诺书
2014/03/25 职场文书
敬老模范事迹
2014/05/21 职场文书
授权委托书范文
2014/07/31 职场文书
2014年乡镇妇联工作总结
2014/12/02 职场文书
2016年会开场白台词
2015/06/01 职场文书
人工智能深度学习OpenAI baselines的使用方法
2022/05/20 Python