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中子类继承父类的__init__方法实例
Dec 15 Python
使用Python对Access读写操作
Mar 30 Python
Python实现七彩蟒蛇绘制实例代码
Jan 16 Python
Python批处理删除和重命名文件夹的实例
Jul 11 Python
python模拟登陆,用session维持回话的实例
Dec 27 Python
python matplotlib如何给图中的点加标签
Nov 14 Python
python 解决flask 图片在线浏览或者直接下载的问题
Jan 09 Python
python加密解密库cryptography使用openSSL生成的密匙加密解密
Feb 11 Python
基于K.image_data_format() == 'channels_first' 的理解
Jun 29 Python
python实现网页录音效果
Oct 26 Python
python 实现的IP 存活扫描脚本
Dec 10 Python
OpenCV中resize函数插值算法的实现过程(五种)
Jun 05 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
dedecms 制作模板中使用的全局标记图文教程
2007/03/11 PHP
php session安全问题分析
2011/06/24 PHP
十大使用PHP框架的理由
2015/09/26 PHP
php基于openssl的rsa加密解密示例
2016/07/11 PHP
PHP中一个有趣的preg_replace函数详解
2018/08/15 PHP
js 方法实现返回多个数据的代码
2009/04/30 Javascript
跟着JQuery API学Jquery 之二 属性
2010/04/09 Javascript
人人网javascript面试题 可以提前实现下
2012/01/05 Javascript
JavaScipt中栈的实现方法
2016/02/17 Javascript
js中遍历Map对象的简单实例
2016/08/08 Javascript
详解nodejs异步I/O和事件循环
2017/06/07 NodeJs
JavaScript脚本语言是什么_动力节点Java学院整理
2017/06/26 Javascript
Nodejs 复制文件/文件夹的方法
2017/08/24 NodeJs
js实现本地时间同步功能
2017/08/26 Javascript
JS改变页面颜色源码分享
2018/02/24 Javascript
angular6 利用 ngContentOutlet 实现组件位置交换(重排)
2018/11/02 Javascript
JSON生成Form表单的方法示例
2018/11/21 Javascript
JavaScript数据结构与算法之二叉树插入节点、生成二叉树示例
2019/02/21 Javascript
如何解决日期函数new Date()浏览器兼容性问题
2019/09/11 Javascript
Python3.x+迅雷x 自动下载高分电影的实现方法
2020/01/12 Python
TensorFlow梯度求解tf.gradients实例
2020/02/04 Python
python yield和Generator函数用法详解
2020/02/10 Python
解决Keyerror ''acc'' KeyError: ''val_acc''问题
2020/06/18 Python
信访工作者先进事迹
2014/01/17 职场文书
《小石潭记》教学反思
2014/02/13 职场文书
乡镇个人对照检查材料
2014/08/22 职场文书
小学生清明节演讲稿
2014/09/05 职场文书
校园广播稿精选
2014/10/01 职场文书
中学生的1000字检讨书
2014/10/11 职场文书
初三英语教学计划
2015/01/23 职场文书
学校青年志愿者活动总结
2015/05/06 职场文书
2015年班组建设工作总结
2015/05/13 职场文书
生日寿星公答谢词
2015/09/29 职场文书
股东出资协议书
2016/03/21 职场文书
python基于tkinter制作m3u8视频下载工具
2021/04/24 Python
Python爬虫入门案例之爬取二手房源数据
2021/10/16 Python