文件搜索工具(Python实现)

2023-11-20

文件搜索工具介绍

文件搜索工具能够基于名称快速定位匹配的文件和文件夹位置,比如Everything就是Windows上的一款文件搜索工具:

在这里插入图片描述

代码实现

下面我们实现一个简单的文件搜索工具。

实现思路

文件搜索的步骤分为两步:

  1. 要求用户输入要搜索的路径和要搜索的关键字。
  2. 在指定路径下搜索包含指定关键字的文件和文件夹,并将匹配的文件和文件夹的路径进行打印输出。

需要注意的是,在搜索时并不是只在用户指定的那一级目录下进行搜索,如果该目录下存在子目录,那么还需要在该子目录下进行搜索。

例如,我们在D盘下创建了一个名为TestDir的目录,该目录中的文件布局如下:

在这里插入图片描述

当我们指定在TestDir目录下以test为关键字进行查找时,我们希望的是找出TestDir目录及其子目录下,所有包含test关键字的文件和目录,因此在文件搜索的过程中涉及递归查找。

os.walk函数

虽然在文件搜索的过程中需要进行递归查找,但这个递归查找的过程不需要我们来控制,os模块中提供了walk函数,该函数可以对目录树进行遍历,而我们只需要使用简单的循环就能够获取到遍历过程中的文件名和目录名。比如:

import os

inputPath = input('请输入要搜索的路径: ')

for dirpath, dirnames, filenames in os.walk(inputPath):
    print('-----------------------')
    # 打印当前正在遍历的路径
    print(f'所在路径: {dirpath}')
    # 打印当前遍历路径下的目录名
    print(f'目录: {dirnames}')
    # 打印当前遍历路径下的文件名
    print(f'文件: {filenames}')

运行程序后指定要搜索的路径为刚才的TestDir目录,walk函数就会自动对TestDir目录树进行遍历,同时我们能获取到walk函数每次遍历的路径,以及该路径下的目录名和文件名。

在这里插入图片描述

说明一下:

  • 调用walk函数时需要传入一个参数,该参数代表的就是需要从哪个路径开始进行遍历。
  • 循环调用walk函数时,for循环中需要指定三个的循环变量,分别代表的是walk函数每次所遍历的路径,以及该路径下的目录名和文件名(以列表的形式成列)。

通过walk函数遍历TestDir目录的输出结果可以看出,walk函数遍历目录树时的遍历走向大致如下:

在这里插入图片描述

os.path.join函数

通过walk函数已经能够获得指定目录树下的所有目录名和文件名了,现在我们要做的就是判断每次遍历过程中,获得的目录名和文件名是否包含用户输入的关键字,如果包含关键字则说明该目录或文件是符合用户搜索要求的,这时就应该把该目录或文件的路径进行输出。

在walk函数的for循环中要得到指定目录或文件的路径实际上很简单,只需要将walk当前正在遍历的路径和该目录名或文件名拼接起来即可。

这时可以使用os.path模块中的path函数,该函数可以将多个路径进行拼接。比如:

import os

print(os.path.join('xxx', 'yyy', 'zzz'))  # xxx\yyy\zzz

说明一下: os.path模块是os模块中的一个子模块,用于通用路径名操作。

代码整体编写

现在编写代码的思路就很清晰了,

  1. 要求用户输入要搜索的路径和要搜索的关键字。
  2. 以for循环的方式调用walk函数,获取每次遍历的路径,以及该路径下的目录名和文件名。
  3. 判断遍历到的目录名和文件名是否包含关键字,如果包含则通过path函数将当前正在遍历的路径和该目录名或文件名进行拼接,并将拼接后的目录或文件路径进行输出。

代码如下:

import os

while True:
    inputPath = input('请输入要搜索的路径: ')
    pattern = input('请输入要搜索的关键字: ')

    for dirpath, dirnames, filenames in os.walk(inputPath):
        # 打印当前遍历路径下包含关键字的目录名
        for d in dirnames:
            if pattern in d:
                print(os.path.join(dirpath, d))
        # 打印当前遍历路径下包含关键字的文件名
        for f in filenames:
            if pattern in f:
                print(os.path.join(dirpath, f))

说明一下: 为了让用户能够进行多次文件搜索,可以将上述逻辑放入死循环中。

打包成exe程序

安装pyinstaller

当前编写的程序只能在安装了Python环境的机器上运行,为了能够让该程序更好的部署到其他机器上,可以借助pyinstaller来把Python程序打包成exe程序。

执行以下命令安装pyinstaller命令:

pip install pyinstaller

打包程序

执行以下命令即可将刚才编写的Python程序打包成exe程序。

pyinstaller -F FileSearchTool.py

此时在Python程序所在的同级目录下会生成一个dict目录,在该目录下就会生成对应的exe程序。
在这里插入图片描述
说明一下:

  • -F表示打包成单个exe程序(不带动态库)。
  • 安装pyinstaller命令后最好先重启一下PyCharm,否则在使用时可能会提示找不到pyinstaller命令。

此时我们就可以直接将这个exe程序发送给其他人使用了,而无需对方机器安装Python环境。

效果展示

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

文件搜索工具(Python实现) 的相关文章

随机推荐

  • R语言与多元线性回归方程及各种检验

    R语言与多元线性回归方程及各种检验 文章目录 R语言与多元线性回归方程及各种检验 一 模型建立 二 多重共线性 1 产生的背景 2 多重共线性的检验 1 简单相关系数法 2 方差膨胀因子 vif 法 3 矩阵 X T X
  • 一、eladmin学习笔记之common层相关注解上

    文章目录 eladmin使用的相关注解 1 Inherited 2 Documnet 3 Target 用来表示注解的作用范围 4 Retention 5 Component 6 RequestMapping 8 AliasFor 9 Ma
  • C#学习笔记 控制流

    C 是一门命令式的语言 默认语句以顺序方式执行 利用控制流语句可以改变程序的执行流程 以实现复杂的算法 条件语句 if语句 如果如果是单条件判断 可以使用if语句 if语句的执行体 既可以是单条语句也可以是由 花括号括起来的语句块 bool
  • SQLite解决插入特殊字符导致插入失败的问题

    SQLite解决插入特殊字符导致插入失败的问题 背景 在使用SQLite数据库时 我们经常会遇到插入的数据里面有单引号之类的特殊字符 如果不能正确处理 会导致插入数据失败 解决方法 方法一 对特殊字符进行转义 INSERT INTO tim
  • Java并发基础--CPU性能优化与内存屏障

    为了提高程序运行的性能 现代CPU在很多方面对程序进行了优化 1 CPU高速缓存 尽可能地避免处理器访问主内存的时间开销 处理器大多会利用高速缓存以提高性能 CPU缓存分为多几缓存 如图 L1 Cache 一级缓存 是CPU第一层高速缓存
  • 以太网详解(三)-PHY Transceiver硬件设计注意事项

    以太网接口硬件设计中 现在CPU集成度越来越高 都会集成MAC 而对于硬件设计来说 只需要外接PHY Transceiver IC即可实现以太网通信 而PHY芯片 以百兆为例 外围电路基本如下所示 RJ45连接器 ESD保护芯片 网络变压器
  • 记录我的第一个MyBatis-Plus例子

    第一个MyBatis Plus例子 灰常简单 特此记录 第一步 数据库表 第二步 pom引入jar包 第三步 启动类 实体类 application properties 在编写一个mapper接口 第四步 编写测试类 执行结果如下图所示代
  • 单级和串级pid原理分析以及pid应用与小车的技巧

    这篇文章主要是帮助理解和使用pid 不会讲复杂的代码公式 重点在最后 一定要看到最后 pid可以看作是一种控制器 用来控制某个变量达到你想要的地步 单级pid 这里我举个例子来理解一下 假设有一个水缸 最终的控制目的是要保证水缸里的水位永远
  • 一文讲透彻!RobotFramwork测试框架教程(全能)

    Robot Framwork在业界早已名声大振 有很多刚学自动化测试的伙伴问我 有没有不需要编程就可以玩自动化的方法 有吗 有的 Robot Framwork 我们今天就一篇文章 把它讲得明明白白 一 Robot Framwork简述 Ro
  • 软件外包开发的测试用例

    软件测试用例是一组详细的步骤 输入数据 预期结果和实际结果 用于验证软件是否满足特定需求或功能 编写测试用例的目的是确保软件的质量和性能 今天和大家分享编写软件测试用例的一般步骤 希望对大家有所帮助 北京木奇移动技术有限公司 专业的软件外包
  • 使用web3和infura开发以太坊ethereum区块链

    web3 Github https github com ethereum web3 js web3 js是以太坊提供的一个Javascript库 它封装了以太坊的RPC通信API 提供了一系列与区块链交互方法 使js与以太坊交互变得简单
  • Netty网络框架

    buffer 缓冲区 S2 Channel的flush方法 发送缓冲区中的数据并清空 gt buffer 缓冲区 buffer 发送 gt S3 SocketChannel write 将数据写入到缓冲区 flush 发送缓冲区中的数据并进
  • db2实现两个数相减_DB2 日期相减

    标签 简单方法 使用 days 字符型的日期 2012 01 01 2012 01 11 values days date 2012 01 11 days date 2012 01 01 10 错误示例 sql Append LEFT JO
  • ARM developer suit v1.2免安装教程

    博主按照网上的步骤安装了不下10遍ads 很生气 一次都没成功过 然后卸载后 继续安装 总是出现modify repait unistall那个界面 以为没有卸干净 然后按照网上的删注册表记录的方法 电脑第二天就开不了机了 当然还是没装成功
  • 路由器简单认识

    路由器 是一个三层设备 可以解析到三层 第一层是比特流 电压 电信号 第二层是数据帧 从比特流到数据帧的过程也叫格式化 可以看到MAC地址 第三层是数据包 IP地址 网络层 交换机 网桥 二层设备 区别 1 交换机基于硬件处理 网桥基于软件
  • 简单介绍十几款常用的画架构图流程图的软件

    简单介绍十几款常用的画架构图流程图的软件 draw io draw io是开源免费的在线画图工具 还提供桌面版本 特性 实时协作 支持在线离线版本 存储支持多种方式 Google Drive OneDrive GitHub GitLab D
  • 非常优秀的网站设计案例,设计师必备

    厚积才能薄发 一个优秀的设计师的天性一定是想要获得更多网站设计灵感 擅于为新项目寻找创意切入点 搜索设计参考资源 最新的设计趋势 今天为大家带来了一组免费可商用的网站设计案例 通过这些网站设计案例 你可以获得 寻找不同风格的网站灵感 配色
  • 硬件工程师-三极管

    目录 一 机械开关 二 三极管的种类 三 NPN型三极管 N型三极管 四 PNP型三极管 编辑 五 三极管公式 NPN型三极管 PNP型三极管 六 NPN管的继续讲解 三极管的导通电压 PNP管也是一样 三极管的三种状态 判断三极管是放大还
  • 抖音SEO矩阵系统源码开发部署(二)技术搭建+二次开发

    抖音SEO矩阵系统源码开发 是一项技术密集型工作 需要对大数据处理 人工智能等领域有深入了解 该系统开发过程中需要用到多种编程语言 如Java Python等 同时 需要使用一些框架和技术 如Hadoop Spark PyTorch等 以提
  • 文件搜索工具(Python实现)

    文章目录 文件搜索工具介绍 代码实现 实现思路 os walk函数 os path join函数 代码整体编写 打包成exe程序 效果展示 文件搜索工具介绍 文件搜索工具能够基于名称快速定位匹配的文件和文件夹位置 比如Everything就