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

简介: 五分钟学 | 自制一个简易增强型 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 工具,快来试试吧!

相关文章
|
5月前
|
存储 监控 搜索推荐
深度解析:装机设置全攻略,打造个性化高性能电脑
装机不仅仅是一个技术活,更是一个充满乐趣和创造性的过程。通过精心的硬件选择、兼容性的考虑、操作系统的安装与优化、个性化的设置以及性能测试与调优,你可以打造出一台符合自己使用习惯、性能出众的个性化电脑。同时,不要忽视备份与恢复策略的重要性,确保你的数据和系统安全无忧。希望本文能够为你提供有用的指导和启发,让你在装机的道路上更加得心应手。
77 1
|
7月前
|
弹性计算 安全 Ubuntu
从零开始搭建WebGIS网站(一)-云服务器准备
WebGIS网站系列连载第一篇,记录一下阿里云服务器的准备环节。
224 56
|
云安全 存储 弹性计算
小鱼深度产品测评之:阿里云新款通用算力型ECS云服务器Universal实例,实力与能力并存的一款产品。
小鱼深度产品测评之:阿里云新款通用算力型ECS云服务器Universal实例,实力与能力并存的一款产品。
588 1
|
弹性计算
阿里云最新产品手册——云基础产品与基础设施——计算——云服务器ECS——应用场景——在线游戏
阿里云最新产品手册——云基础产品与基础设施——计算——云服务器ECS——应用场景——在线游戏自制脑图
341 2
|
存储 弹性计算 大数据
阿里云服务器是什么?优势、功能和应用场景详细介绍
阿里云服务器是什么?优势、功能和应用场景详细介绍,云服务器租用价格、云服务器使用场景及限制说明,阿里云服务器网分享云服务器ECS介绍、个人和企业免费试用、云服务器活动、云服务器ECS规格、优势、功能及应用场景详细说明
1215 0
|
弹性计算 运维 Ubuntu
许久未见,仍是熟悉面孔——阿里云 ECS 使用体验
多年以前,因帮助站长朋友打理网站,我接触过云服务器和 VPS,因经济原因和维护原因,我的博客网站一直搭建在虚拟主机上,如今因“飞天加速计划”才有幸迁移到云服务器上。再次使用云服务器 ECS,虽然许久未见,但仍是熟悉面孔……本文将向你讲述,我,作为一个科技爱好者的建站故事。
180 1
许久未见,仍是熟悉面孔——阿里云 ECS 使用体验
|
弹性计算 监控 NoSQL
阿里云ECS学生机使用心得体会
最近领取了一台阿里云的学生机,我之前也买过过不少云服务器,来说说自己的体验感和技巧。
176 1
阿里云ECS学生机使用心得体会
|
弹性计算 安全 Linux
很高兴在这里发表一篇文章来跟大家分享我最近使用ECS的体验感受。我是一名广东财贸职业学院云计算专业的一名学生,因为目前学习的内容我需要一台稳定安全的服务器,所以我迫切的想要入手一台服务器。我找到了ecs。并且在这款服务器里使用着我所学习的一些技术,并且通过这款服务器使用着ecs。在这款服务器里面使用ecs,我学习了Linux安装docker并使用docker实现项目的环境搭建。
我在这款服务器里面,可以使用任何的电脑,包括网络,包括手机,包括电视等等,可以说是无所不用其极,但是这款服务器的强悍之处在于,它可以让我随时随地的控制着服务器上的电脑,甚至可以随意的调节服务器上的电源。我可以在服务器上随意的调节服务器上的电源,让服务器不会出现任何故障。我在这款服务器里面使用ecs,我学习了Linux安装docker并使用docker实现项目的环境搭建。再就是关于远程访问的配置,这可让我琢磨了不少时间。我遇到的问题便是:将项目部署到服务器上后,在服务器本地能够运行,但在其他设备上通过服务器的外网IP进行访问时,却提示访问超时,经过多方查询后,我才知道原来是需要配置安全组以及在服
165 0
阿里学生云服务器之远程驾驶初体验
借助阿里云服务器搭建远程驾驶操控平台,包括实时车辆前方图像的显示和操纵指令的远程下达,最终实现坐在办公室遥控数十里之外的汽车。