文章目录

  • 文件搜索工具介绍
  • 代码实现
    • 实现思路
    • os.walk函数
    • os.path.join函数
    • 代码整体编写
    • 打包成exe程序
    • 效果展示

文件搜索工具介绍

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

代码实现

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

实现思路

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

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

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

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

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

os.walk函数

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

import osinputPath = 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 osprint(os.path.join('xxx', 'yyy', 'zzz'))  # xxx\yyy\zzz

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

代码整体编写

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

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

代码如下:

import oswhile 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环境。

效果展示

文件搜索工具(Python实现)相关推荐

  1. python 简单检索器_python实现文件搜索工具(简易版)

    在python学习过程中有一次需要进行GUI 的绘制, 而在python中有自带的库tkinter可以用来简单的GUI编写,于是转而学习tkinter库的使用. 学以致用,现在试着编写一个简单的磁文件 ...

  2. python实现文件搜索工具(简易版)

    在python学习过程中有一次需要进行GUI 的绘制, 而在python中有自带的库tkinter可以用来简单的GUI编写,于是转而学习tkinter库的使用. 学以致用,现在试着编写一个简单的磁文件 ...

  3. 深挖你硬盘里的见不得人的【学习资料】,Python制作一款文件搜索工具

    前言 今天来教大家做一个文件搜索工具,专门来找你电脑里的[学习资料],嘿嘿 开发环境 解释器: Python 3.8.8 | Anaconda, Inc. 编辑器: pycharm 专业版 先演示效果 ...

  4. PDF Search for Mac(PDF文件搜索工具)

    本次小编为您带来PDF Search for Mac破解版,这是Mac平台上一款可以帮助用户快速搜索文档,在Mac上从数千份文档中,快速搜索出你所需要的文档的PDF文件搜索工具!有了PDF Searc ...

  5. Atitit.文件搜索工具 attilax 总结

    Atitit.文件搜索工具 attilax 总结 1. 指定目录按照体积大小精确搜索1 1.1. File Seeker 4.5 版本的可以,3.5版本的不行..1 2. 按照文件内容搜索1 2.1. ...

  6. gorm preload 搜索_macOS系统本地文件搜索工具

    Find Any File Mac可以准确快速地查找本次磁盘甚至是本地隐藏磁盘上的任何文件,Find Any File Mac不使用数据库,而是使用文件系统驱动程序的快速搜索操作,包括能够搜索到通常隐 ...

  7. 文件搜索工具everything

    Everything是voidtools开发的一款文件搜索工具,官网描述为"基于名称实时定位文件和目录(Locate files and folders by name instantly) ...

  8. gorm preload 搜索_文件太多忘记了文件放在什么地方?那你可以试试这款文件搜索工具...

    忘记了文件放在什么地方?文件太多不能一下子找到?那么你也许可以试试这款软件--ProFind for mac版,这是一款适用于macOS系统的文件搜索工具,它具有强大的功能和出色的性能,可为macOS ...

  9. ls mac 显示最近修改日期_Find Any File for Mac(Mac本地文件搜索工具)

    今天小编给大家带来的Find Any File mac是Mac平台上的一款本地文件搜索查找工具,可以让你在本地磁盘上快速搜索.查找你需要的文件.甚至是隐藏文件都逃不出Find Any File mac ...

最新文章

  1. Javascript导航菜单13则
  2. Windows下本机简易监控系统搭建(Telegraf+Influxdb+Grafana)
  3. VC++2010中的GetWindowText与GetWindowTextW的区别
  4. 苹果叫停经销商供货拼多多?官方回应:系谣言 所售新款iPhone均为正品
  5. 模板 manacher算法
  6. WIN10 64位 JDK的安装
  7. Selenium应用代码(常见封装的方法二)
  8. 系统学习机器学习之线性判别式(二)
  9. 左边导航条动态增加或缩短高度以及放大缩小问题的解决方法
  10. aix系统服务器日志外发,AIX系统日志
  11. phpcms v9 wap手机门户分页(显示首页末页)
  12. Word批量生成软件
  13. 累土--电容屏和电阻屏区别
  14. video标签和source标签
  15. 如何申请Autodesk ReCap 360 photo的云币(Cloud Credit)
  16. 干货预警!自动化立体仓库电气安全设计
  17. 谷歌浏览器访问抖音网页版白屏
  18. [搞笑] 后舍男生最完美的视频收藏全纪录
  19. 7.3 向量的数量积与向量积
  20. 英文翻译中文常见脏话

热门文章

  1. BIND9配置文件详解
  2. css解决谷歌,360浏览器默认最小字体为12px问题
  3. FPGA试题练习--------CMOS门电路分析
  4. 风格化半调效果如何制作?教程来了
  5. MAC M1大数据0-1成神篇-7 补充CAP模式
  6. 苹果电脑怎么设置和修改开机密码?
  7. 计算机图形学(一) 视频显示设备_7_光栅扫描系统
  8. ip-guard文档加密后无小锁标志
  9. 特殊符号,emoji表情,四字节去除问题
  10. ftp打开方式更改为资源管理器方法