Python实现【文件搜索工具】

目录

文件搜索工具

实现思路

os.walk函数

os.path.join函数

打包成exe程序

效果展示

总结不易~本章节对我有很大的收获,希望对你也是~~~~


我的gitee仓库是:https://gitee.com/liu-yihao-hhh/learning-python

文件搜索工具

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

今天就来实现一个简单版本的文件搜索工具:

实现思路

        1. 要求用户输入搜索的路径和搜索的关键字

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

需要注意的是,在搜索时并不是只在用户指定的那一级目录下进行搜索,而是在该目录下进行递归时查找,找到该目录和子目录下所有名为该文件或者文件夹

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

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

os.walk函数

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

for dirpath, dirnames, filenames in os.walk(inputPath):

其中:
dirpath表示:遍历到当前位置对应的路径是啥~
dirnames:当前目录下,都有哪些目录,是一个列表,可以包含多个目录名~
filenames: 当前目录下,都有哪些文件名~ 是一个列表,可以包含多个文件名~

比如:

import os

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

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

说明一下:

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

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

os.path.join函数

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

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

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

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 + "文件的绝对路径"

此时在Python程序所在的同级目录(用户目录下)下会生成一个dict目录,在该目录下就会生成对应的exe程序。

说明一下:

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

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

效果展示

总结不易~本章节对我有很大的收获,希望对你也是~~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值