文件搜索工具(Python实现)
Posted 2021dragon
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件搜索工具(Python实现)相关的知识,希望对你有一定的参考价值。
文章目录
文件搜索工具介绍
文件搜索工具能够基于名称快速定位匹配的文件和文件夹位置,比如Everything就是Windows上的一款文件搜索工具:
代码实现
下面我们实现一个简单的文件搜索工具。
实现思路
文件搜索的步骤分为两步:
- 要求用户输入要搜索的路径和要搜索的关键字。
- 在指定路径下搜索包含指定关键字的文件和文件夹,并将匹配的文件和文件夹的路径进行打印输出。
需要注意的是,在搜索时并不是只在用户指定的那一级目录下进行搜索,如果该目录下存在子目录,那么还需要在该子目录下进行搜索。
例如,我们在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模块中的一个子模块,用于通用路径名操作。
代码整体编写
现在编写代码的思路就很清晰了,
- 要求用户输入要搜索的路径和要搜索的关键字。
- 以for循环的方式调用walk函数,获取每次遍历的路径,以及该路径下的目录名和文件名。
- 判断遍历到的目录名和文件名是否包含关键字,如果包含则通过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环境。
效果展示
以上是关于文件搜索工具(Python实现)的主要内容,如果未能解决你的问题,请参考以下文章