使用python实现一个文件搜索功能,类似于Everything功能

简介: 一般人日常总是会将一些片段信息记录到文件中,放到电脑硬盘上。等过段时间,可能就不知道放到哪里了,电脑上文件夹太多。 找文件一般都会借助于搜索软件,比如Everything软件就很强大,输入名称,就能全局查找文件;

一般人日常总是会将一些片段信息记录到文件中,放到电脑硬盘上。等过段时间,可能就不知道放到哪里了,电脑上文件夹太多。 找文件一般都会借助于搜索软件,比如Everything软件就很强大,输入名称,就能全局查找文件;

但是Everyting软件只能匹配文件内,如果想搜索的是文件内容,就没办法了。不知道市面上有没有这样的软件?

不过,可以使用python做一个简单的搜索功能,实现这个需求;

实现原理

  • 使用os遍历文件夹下所以文件
  • 使用内置open函数读取文件内容并搜索匹配
  • 为了提供速度,加一个多线程执行方法

准备工作

需要用到库中只有多线程库threading是第三方库,需要安装;安装方式比较简单,打开命令行窗口;执行命令:

pip install threading

等待安装成功;

多线程基础知识
进程是应用程序的执行实例。每一个运行中的程序就是一个进程。
线程是进程的组成部分,一个进程可以拥有多个线程。在多线程中,会有一个主线程来完成整个进程从开始到结束的全部操作,而其他的线程会在主线程的运行过程中被创建或退出。

并发和并行

并发和并行是两个概念,并行指在同一时刻有多条指令在多个处理器上同时执行;并发是指在同一时刻只能有一条指令执行,但多个进程指令被快速轮换执行,使得在宏观上具有多个进程同时执行的效果。

使用threading 创建线程的两种方式:

使用 threading 模块中 Thread 类的构造器创建线程。即直接对类 threading.Thread 进行实例化创建线程,并调用实例化对象的 start() 方法启动线程。
继承 threading 模块中的 Thread 类创建线程类。即用 threading.Thread 派生出一个新的子类,将新建类实例化创建线程,并调用其 start() 方法启动线程。

具体实现

  1. 编码内容搜索函数:

    输入文件路径,
    读取文件内容
    匹配给定搜索词;

def findTask( path_name):

    print(f'正在查找 {path_name}')
    f = open(path_name, "r",encoding='utf-8')
    #打开文件,只读模式
    try:
        #判断搜索关键字是否在文件内容中
        if str_text in f.read():
        #搜索到添加到结果中,后续输出展示
           results.append(f'{str_text} found in {path_name} = content')
    except UnicodeDecodeError:
        print(f'解析错误 {path_name}')
2. **编码文件遍历方法:**
使用 os.listdir(dir_path)函数获取文件夹下所有文件
对子文件夹进行递归调用
对文件先进行文件名匹配,

files = os.listdir(dir_path)

for name in files:
    path_name = os.path.join(dir_path, name)
    if os.path.isdir(path_name):
        search_files(path_name)
    if str_text in path_name:
        results.append(f'{str_text} found in {path_name} == name')
获取文件信息,主要包括后缀名,大小等,判断是否进行后续操作    
对于小文件,可以直接进行处理,大文件放到线程中进行

file_proc = threading.Thread(target=findTask, args=(path_name,))
file_proc.start()
threads.append(file_proc)


### 编码运行函数
主要是对线程调用join方法
并打印最终搜索结果

ef run():

search_files(path)
for thr in threads:
    thr.join()
#等待所以线程结束
if len(results) == 0:
    print(str_text + " not found! ")
else:
    for res in results:
        print(res)
相关文章
|
5月前
|
缓存 供应链 监控
1688item_search_factory - 按关键字搜索工厂数据接口深度分析及 Python 实现
item_search_factory接口专为B2B电商供应链优化设计,支持通过关键词精准检索工厂信息,涵盖资质、产能、地理位置等核心数据,助力企业高效开发货源、分析产业集群与评估供应商。
|
5月前
|
数据可视化 Linux iOS开发
Python脚本转EXE文件实战指南:从原理到操作全解析
本教程详解如何将Python脚本打包为EXE文件,涵盖PyInstaller、auto-py-to-exe和cx_Freeze三种工具,包含实战案例与常见问题解决方案,助你轻松发布独立运行的Python程序。
1387 2
|
5月前
|
JSON 监控 数据格式
1688 item_search_app 关键字搜索商品接口深度分析及 Python 实现
1688开放平台item_search_app接口专为移动端优化,支持关键词搜索、多维度筛选与排序,可获取商品详情及供应商信息,适用于货源采集、价格监控与竞品分析,助力采购决策。
|
5月前
|
设计模式 缓存 监控
Python装饰器:优雅增强函数功能
Python装饰器:优雅增强函数功能
309 101
|
5月前
|
缓存 测试技术 Python
Python装饰器:优雅地增强函数功能
Python装饰器:优雅地增强函数功能
250 99
|
5月前
|
存储 缓存 测试技术
Python装饰器:优雅地增强函数功能
Python装饰器:优雅地增强函数功能
245 98
|
5月前
|
缓存 供应链 监控
VVIC seller_search 排行榜搜索接口深度分析及 Python 实现
VVIC搜款网seller_search接口提供服装批发市场的商品及商家排行榜数据,涵盖热销榜、销量排名、类目趋势等,支持多维度筛选与数据分析,助力选品决策、竞品分析与市场预测,为服装供应链提供有力数据支撑。
|
5月前
|
缓存 Python
Python中的装饰器:优雅地增强函数功能
Python中的装饰器:优雅地增强函数功能
|
5月前
|
缓存 监控 算法
唯品会item_search - 按关键字搜索 VIP 商品接口深度分析及 Python 实现
唯品会item_search接口支持通过关键词、分类、价格等条件检索商品,广泛应用于电商数据分析、竞品监控与市场调研。结合Python可实现搜索、分析、可视化及数据导出,助力精准决策。
|
4月前
|
监控 机器人 编译器
如何将python代码打包成exe文件---PyInstaller打包之神
PyInstaller可将Python程序打包为独立可执行文件,无需用户安装Python环境。它自动分析代码依赖,整合解释器、库及资源,支持一键生成exe,方便分发。使用pip安装后,通过简单命令即可完成打包,适合各类项目部署。