五分钟学 | 自制一个简易增强型 Everything 工具

简介: 今天我们继续5分钟学系列,通过简短的代码,来完成实用的功能。今天我们来实现一个简易增强版的 Everything。为什么简易呢,因为单从搜索的功能上来说,肯定没有成熟的 Everything 来的强大,但是基本搜索还是可以的;而对于增强呢,就是我们可以加入自己常用的操作,比如直接把搜索到的文件拷贝的指定目录下,这样是不是又节省了很多时间呢。

文件夹遍历


这里我们首先想到的就是 Python 内置库 os 的 walk 函数,该函数可以获取到指定目录下的文件和子文件,它返回三个属性,分别是父目录、所包含的子目录和所包含的文件

./
['.idea', 'doc', 'Flask Web', 'Flask-Web', 'html', 'jpg', 'md', 'pdf', 'xml']
['.DS_Store', '1.jpg', '2.xml', '3.pdf', 'personal document.rar', 'search_all.py', 'test.py']
=========
./jpg
[]
['1.jpg', '2.xml']

有了这么一个方便的函数,我们就可以实现遍历指定文件夹下的所有文件夹,找出我们需要的文件了

for dirpath, dirname, files in os.walk('./'):
    if file_name in files:
        print(dirpath)
        print(dirname)
        print(files)
        cpath = os.path.join(dirpath, file_name)
        print(cpath)

当然了,当前我们还只是写死了要搜索的目录,为了实现搜索任意指定的文件夹功能,我们来封装成函数,把搜索目录作为参数传进来

def search_all(spath, sfile):
    for dirpath, dirname, files in os.walk(spath):
        if sfile in files:
            print(dirpath)
            print(dirname)
            print(files)
            cpath = os.path.join(dirpath, file_name)
            print(cpath)
            print("=========")

下面我们再进行拷贝的操作


拷贝文件


拷贝文件,可以使用 shutil 库的 copy 函数,只需要传入源文件和目的地址就可以,我们把相关代码加入

def search_all(spath, sfile, dpath):
    for dirpath, dirname, files in os.walk(spath):
        if sfile in files:
            print(dirpath)
            print(dirname)
            print(files)
            cpath = os.path.join(dirpath, file_name)
            print(cpath)
            shutil.copy(cpath, os.path.join(dpath, file_name))
            print("=========")

这样写看起来似乎很美好,但是存在两个问题

  1. 如果传入的 dpath 不存在,那么程序会报错
  2. 如果搜索出多个目的文件,则在拷贝第二个目的文件时,程序也会报错

下面我们就来逐个解决这两个问题


增强程序健壮性


首先解决目的地址不存在的问题,我们来做个判断,对于不存在的目的地址,先创建目录,再进行文件拷贝

def search_all(spath, sfile, dpath):
    for dirpath, dirname, files in os.walk(spath):
        if sfile in files:
            print(dirpath)
            print(dirname)
            print(files)
            cpath = os.path.join(dirpath, file_name)
            print(cpath)
            if not os.path.exists(dpath):
                os.mkdir(dpath)
            shutil.copy(cpath, os.path.join(dpath, file_name))
            print("=========")

通过 os 库的 exists 函数来判断文件夹是否存在,如果不存在,再通过 mkdir 函数来创建对应目录


下面我们再来思考下,如何解决多个文件的问题呢,因为不同目录下的文件名可能相同,但是它们很有可能不是一样的文件,所以我们不能直接覆盖,还是需要做一定的区分的。

我这里的处理方式就是如果存在多个需要拷贝的文件,就在指定的目的文件夹下创建包含目录信息的文件夹,并把对应的文件拷贝进去,这样就可以很好的区分文件的来源了

def search_all(spath, sfile, dpath):
    file_num = 0
    file_path = []
    for dirpath, dirname, files in os.walk(spath):
        if sfile in files:
            print(dirpath)
            print(dirname)
            print(files)
            cpath = os.path.join(dirpath, file_name)
            print(cpath)
            print("=======")
            file_path.append(cpath)
        file_num += 1
    if not os.path.exists(dpath):
        os.mkdir(dpath)
    if file_num == 1:
        shutil.copy(file_path[0], os.path.join(dpath, file_name))
    else:
        for file in file_path:
            mk_path = file.replace(r'/', '-')
            mpath = os.path.join(dpath, mk_path)
            os.mkdir(mpath)
            shutil.copy(file_path[0], os.path.join(mpath, file_name))

这样,我们就基本完成了一个简易的增强型 Everything 工具,快来试试吧!

相关文章
|
4月前
|
数据管理 开发工具 索引
在Python中借助Everything工具实现高效文件搜索的方法
使用上述方法,你就能在Python中利用Everything的强大搜索能力实现快速的文件搜索,这对于需要在大量文件中进行快速查找的场景尤其有用。此外,利用Python脚本可以灵活地将这一功能集成到更复杂的应用程序中,增强了自动化处理和数据管理的能力。
327 0
|
6月前
|
存储 人工智能 移动开发
AppFlow —— 给您的网站或企微添加AI助手
AppFlow AI助手提供灵活配置,助您轻松实现AI工具的Web页面访问与多种集成方式(H5页面、悬浮框等)。支持自定义页面生成及样式调整,满足个性化需求。文中详细介绍了创建AI助手、模型配置、Web页面集成等步骤,并展示不同场景下的使用效果。此外,还提供了企业微信集成、模型管理和插件扩展等相关操作指引,助力高效利用AI助手提升工作体验。
931 15
AppFlow —— 给您的网站或企微添加AI助手
|
人工智能 机器人 开发者
AppFlow:为您的任意模型赋能——上下文连续会话能力
通过AppFlow,无需任何开发工作,即可使大型语言模型具备上下文连续对话的能力。本文以钉钉会话机器人为例,详细介绍如何配置这一功能:首先选择触发器,如钉钉机器人收到文本消息;接着配置上下文组件,组合当前和历史会话;然后选择模型,例如通义千问,并配置相应参数;更新上下文,设置对话内容和会话ID;最后将模型回答发送至钉钉。整个过程简单快捷,适用于多种触发器和模型。
698 1
AppFlow:为您的任意模型赋能——上下文连续会话能力
|
9月前
|
人工智能 自然语言处理 测试技术
Potpie.ai:比Copilot更狠!这个AI直接接管项目代码,自动Debug+测试+开发全搞定
Potpie.ai 是一个基于 AI 技术的开源平台,能够为代码库创建定制化的工程代理,自动化代码分析、测试和开发任务。
786 19
Potpie.ai:比Copilot更狠!这个AI直接接管项目代码,自动Debug+测试+开发全搞定
|
8月前
|
自然语言处理 搜索推荐 前端开发
大模型联网搜索的短板与突破之路
本文作者详细分析了当前大模型在联网搜索功能中存在的几个主要问题,并提供了具体的案例和解决方案。
1285 8
大模型联网搜索的短板与突破之路
|
8月前
|
JavaScript Ubuntu Linux
如何在阿里云的linux上搭建Node.js编程环境?
本指南介绍如何在阿里云Linux服务器(Ubuntu/CentOS)上搭建Node.js环境,包含两种安装方式:包管理器快速安装和NVM多版本管理。同时覆盖全局npm工具配置、应用部署示例(如Express服务)、PM2持久化运行、阿里云安全组设置及外部访问验证等步骤,助你完成开发与生产环境的搭建。
|
缓存 网络协议 物联网
UDP的可靠性传输
UDP的可靠性传输
463 1
|
前端开发 Java 测试技术
SpringBoot整合WebSocket实现定时任务消息推送
SpringBoot整合WebSocket实现定时任务消息推送
656 0
|
数据可视化 Python
基于matplotlib轻松绘制漂亮的表格
基于matplotlib轻松绘制漂亮的表格
192 2
|
小程序 JavaScript
【微信小程序】三分钟学会小程序的列表渲染
【微信小程序】三分钟学会小程序的列表渲染
1270 0