用Python打造一款文件搜索工具,所有功能自己定义
前言
在日常的办公中,我们经常会从一堆不同格式的文件(夹)中搜索特定的文件,可能你是凭着记忆去找或是借助软件,但你有想过如何用Python实现吗?本文将基于几个常见的搜索操作讲解。
扫描路径内的内容
有些时候我们会希望在当前文件夹的成百上千个文件中快速找到需要的文件,如果这个文件夹又包括很多个子文件夹,并不需要程序进去查找而无端耗费资源。这就是典型的「扫描一层搜索」
1. 基于 os.scandir()
需求说明
❝
输出C:\Program Files (x86)
路径下名字包含“Windows”的文件夹名称,并统计个数
❞
步骤分析
这是一个非遍历的需求,只需要在目的文件夹内扫描一圈判断即可。用到的方法是os.scandir()
,使用如下:
import ospath = ...
for file in os.scandir(path): print(file.name, file.path, file.is_dir())
上面代码最后输出的是给定路径下各内容的名字、绝对路径,并判断其是否是文件夹
需要注意的是os.scandir()
只在路径下一级扫描,需求实现的代码如下(代码逻辑很简单,可以自己做相应调整):
import osnum = 0
for file in os.scandir(r'C:\\Program Files (x86)'):if file.is_dir():if 'Windows' in file.name:print(file.name)num += 1
print('含有Windows的文件夹个数为:', num)
2. 基于 os.listdir()
需求说明
❝
输出C:\Program Files (x86)
路径下所有可执行文件 (即后缀为 .exe)
❞
步骤分析
依然是非遍历的需求,这里使用os.listdir()
,它比os.scandir()
简单一些,可直接调用输出名称而非路径。后缀名可以用字符串的切片来判断,但难免失去灵活性。此时建议用字符串方法string.endswith()
来判断名称的结尾是否是.exe
,代码如下:
import os for file in os.listdir(r'C:\\Program Files (x86)'):if file.endswith('.exe'):print(file)
遍历文件夹搜索文件
更多时候我们希望给定一个大概的路径,在这个路径下的所有文件夹里一层一层找,找到特定文件或者符合要求的文件,这里需要遍历文件,有两种主要的方法:
1. 基于 os.walk()
os.walk 遍历后产生三个参数:当前文件夹路径, 包含文件夹名称 [列表形式], 包含文件名称[列表形式]
可以用如下代码完成简单遍历:
import osfor dirpath, dirnames, filenames in os.walk(r'C:\\Program Files (x86)'):print(f'打开文件夹{dirpath}')if dirnames:print(dirnames)if filenames:print(filenames)print('-' * 10)
需求说明
❝
遍历C:\Program Files (x86)
找出所有新版Excel文件 (即后缀为.xlsx
)
❞
步骤分析
只要理解了os.walk()
的工作模式,用endswith()
判断后缀即可。最后如果需要获得绝对路径可以把当前文件夹路径和文件名拼接,简单一点用 + 或者字符串格式化,也可以用os
模块内的方法
import osfor dirpath, dirnames, filenames in os.walk(r'C:\\Program Files (x86)'):if filenames:for i in filenames:if i.endswith('.xlsx'):print(os.path.join(dirpath, i))
2. 基于非 os 方法:glob
glob
在之前的推文也反复提到遍历框架:
import globfor file in glob.glob('**/*', recursive=True): print(file)
**/*
的使用表示用通配符指代给定路径下的任何一层,recursive
参数允许遍历搜索 由于glob
可以使用「通配符」,大大拓宽了灵活程度,这里利用 glob 也来完成上面的需求
需求说明
❝
遍历C:\Program Files (x86)
找出所有新版Excel文件(即后缀为.xlsx
)
❞
import globfor file in glob.glob('**/*.xlsx', recursive=True): print(file)
可以看到非常简单,在原有代码基础上加上后缀名就能够完成特定类型文件的搜索。如果需要搜索「特定文件」,如遍历C:\Program Files (x86)
找到文件practice.txt
,「只需要后一个*改成具体名称就行」
import globfor file in glob.glob('**/practice.txt', recursive=True): print(file)
写在最后
通过本文的Python自动化脚本制作过程,我们可以再次体会Python办公自动化的强大!如果对自动化代码和数据感兴趣,可查看:https://github.com/liuhuanshuo/zaoqi-Python
当然本文只是基于几个简单的需求来讲解使用Python来制作搜索文件脚本的主要方法,接下来你可以结合之前的自动化案例或以根据自己的需求添加一些其他的规则或增加新的功能,打造出一款属于你的软件!
最后还是希望大家能够理解Python办公自动化的一个核心就是「批量操作-解放双手」,让复杂的工作自动化。
更多精彩推荐
GitHub 标星 20000+,国产 AI 开源从算法开始突破 | 专访商汤联合创始人林达华
性能超越GPU、FPGA,华人学者提出软件算法架构加速AI实时化
马斯克脑机接口、BrainOS相继发布,不努力也能有出路了
核心代码全开源后,还能做出“卡”别人脖子的产品吗?
跑路后再删库?思科前员工离职后恶意删库,损失达 240 万美元
相关文章:

vlan间路由实验
路由与交换技术实验报告 实验7 vlan间路由实验 班级:130462 姓名:张欣国 学号:13046210 一、 实验目的 1. 了解vlan间路由的不同方法; 2. 了解路由备份; 二、 实验步骤与内容 1. 详细阅读操作过程,认真完…

.net中连接SYBASE的种种问题
作者:zwztu http://search.csdn.net/Expert/topic/1612/1612693.xml?temp.2369806首先如果用OLEDB连呢?如果用ASE 的OLEDB 提供者,那这个提供者哪里有下呢? 其次如果用MSDATASHAPE连,可以是可以,…

struts2中使用标签操作静态方法等
2019独角兽企业重金招聘Python工程师标准>>> 有的时候对<%%>特别敏感,不想用jsp的<% %>来调用java类中的静态方法,这时候我们可以用struts2的ognl标签来调用。 下面为struts2的配置文件: <struts><!-- ognl标…
5年5亿美金,华为昇腾如何构建全行业AI生态?
作者 | 阿司匹林出品 | CSDN(ID:CSDNnews)2018 年,在第三届 HUAWEI CONNECT(华为全联接大会)上,华为首次公布了 AI 战略与全栈全场景 AI 解决方案,其中包含全球首个覆盖全场景人工智能的华为昇腾…

avascript中的this与函数讲解
徐某某一个半路出家的野生程序员javascript中的this与函数讲解 前言 javascript中没有块级作用域(es6以前),javascript中作用域分为函数作用域和全局作用域。并且,大家可以认为全局作用域其实就是Window函数的函数作用域ÿ…
英特尔第11代酷睿处理器TigerLake发布,集成Xe GPU,采用10nm制程技术
2020 年 9 月 2 日,英特尔发布了下一代移动 PC 处理器,,搭载英特尔锐炬 Xe 显卡的全新第 11 代智能英特尔酷睿处理器(代号“Tiger Lake”)是全球性能领先的轻薄型笔记本处理器,能够为Windows 和 ChromeOS 系…

带闰年判断的正则表达式
作者: xixigongzhu(夕夕公主) http://search.csdn.net/Expert/topic/1974/1974227.xml?temp.6640131首先,你的年的范围是1800-3999润年:1800,1900,2100,2200,2300,2500&#x…

FTP命令解析
FTP命令是Internet用户使用最频繁的命令之一,不论是在DOS还是UNIX操作系统下使用FTP,都会遇到大量的FTP内部命令。熟悉并灵活应用FTP的内部命令,可以大大方便使用者,并收到事半功倍之效。 FTP的命令行格式为: ftp -v -…

openresty 前端开发入门五之Mysql篇
2019独角兽企业重金招聘Python工程师标准>>> openresty 前端开发入门五之Mysql篇 这章主要演示怎么通过lua连接mysql,并根据用户输入的name从mysql获取数据,并返回给用户 操作mysql主要用到了lua-resty-mysql库,代码可以在github上…

深入理解JavaScript系列(10):JavaScript核心(晋级高手必读篇)
http://www.cnblogs.com/TomXu/archive/2012/01/12/2308594.html 本篇是ECMA-262-3 in detail系列的一个概述(本人后续会翻译整理这些文章到本系列(第11-19章)。每个章节都有一个更详细的内容链接,你可以继续读一下每个章节对应的…

显示打印对话框
Montaque(Rain ManRainman) http://search.csdn.net/Expert/topic/1756/1756799.xml?temp.8004572加一个printdialog到form上,然后调用 printDialog1.ShowDialog() --------------------------------------------------------------- Dim pt As Printi…

百度CTO王海峰服贸会展示AI新基建成果,飞桨获“科技创新服务示范案例”奖
AI正在为各行各业注入新活力,而AI新基建也在为包括服务贸易领域在内的社会经济发展提供新动力。9月4日,万众瞩目的2020中国国际服务贸易交易会正式召开。这是疫情发生以来,我国在线下举办的第一场重大国际经贸活动,吸引了1.8万家境…

创建画布(验证码)
<?php //创建画布$width 500;$height 800;$imageimagecreatetruecolor($width,$height);//var_dump($image); //处理画布 //imagecolorallocate() 分配颜色到画布上,选择一个颜色。//分配颜色$greenimagecolorallocate($image,0,255,0);//填充(油漆…
认知推理下的常识知识库资源、常识测试评估与中文实践项目索引
作者 | 刘焕勇责编 | 李雪敬出品 | CSDN博客Cognitive InferenceCognitive Inference,认知推理、常识知识库、常识推理与常识推理评估的系统项目,以现有国内外已有的常识知识库为研究对象,从常识知识库资源建设和常识推理测试评估两个方面出发…

句号一定要划在句子最美的地方
句号一定要划在句子最美的地方。。。。。。。。。。。。。离职中。。。。转载于:https://blog.51cto.com/luoguoling/944357

调用系统中的默认EMAIL程序
System.Diagnostics.Process.Start("mailto:YourReceiverabcd.com?subjectWhatever&bodyWhatever")

功能点分析:商品类目表
前言作为电商网站,必然要有商品类目表,以便商品分类检索。而设计商品类目表,又是一件特别繁杂的事情。一件商品可能有多个类目来检索出来,比如苹果手机,可以从品牌检索也可以从手机检索。一个类目对应多个商品…

Iframe 用法浅析
解释成“浏览器中的浏览器“很是恰当 <iframe frameborder0 width170 height100 marginheight0 marginwidth0 scrollingno src"move-ad.htm"></iframe> <IFRAME>用于设置文本或图形的浮动图文框或容器。BORDER<IFRAME BORDER"3">…

MySQL之简单示例
Create Table1.创建数据表 CREATE TABLE amount ( id int(11) NOT NULL AUTO_INCREMENT, amount decimal(10,2) DEFAULT NULL, PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8DELIMITER $$2.创建触发器示例 (1)CREATE /*[DEFINER { u…
滴滴AI Labs负责人叶杰平离职!CTO 张博接任
叶杰平9 月 7 日,滴滴出行副总裁、滴滴出行研究院副院长、AI Labs 负责人叶杰平发布内部信,表示即将于近期离职。经滴滴公关部负责人证实,确认叶杰平将离职一事属实。有人猜测,这位 AI 技术大牛的离职,似乎与滴滴近期对…

Alipay秘钥问题
有三种秘钥一个是应用公钥 一个是支付宝公钥 ALIPAY_PUBLIC_KEY 还有一个是秘钥 RSA_PRIVATE_KEY 用支付宝工具生成的那两个分别是 应用公钥 和 秘钥 应用公钥需要提交到支付宝 代码里要用到的两个秘钥分别是 支付宝公钥 和 秘钥 弄了半天总算通了...转载于:https://www…

各种媒体在线播放代码
<embed src"http://wmt2.aboutmedia.com.tw/Aboutmedia/warner/mtv/naying-021011_01v_120k.wmv";; autostart"true" loop"true" width"200" height"150" > 把这个网址http://wmt2.aboutmedia.com.tw/Aboutmedia/wa…
网友:Java岗,自学一个月跳槽计算机视觉!附学习资源合集
笔者在脉脉上看到一条帖子:原来Java岗,自学一个月成功跳槽视觉算法岗。这已经不是笔者第一次看到转行成功的程序员案例了,而大家的跳槽动机基本上都离不开,发展趋势、岗位高薪、职业兴趣。计算机视觉行业真相:竞争压力…

Github的Tom大鸟:我是如何拒绝微软30w的诱惑,专注于Github事业
08是闰年,嗯,这年有366天(废话真多),大概就在去年的此时此刻,我自己一个人孤伶伶坐在旧金山的某个叫Zeke的球迷酒吧。通常我不会去球迷吧鬼混的,更不会来SOMA这个鸟地方(SOMA是旧金山…

Oracle数据库文件坏块损坏的恢复方法
故障描述打开oracle数据库报错 “system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。经检测数据库文件发现sysaux01.dbf有坏块,sysaux01.dbf文件损坏。数据库没有备份,不能通过备份去恢复数据库。现急需恢复zxfg用户下的数据。故障分…

“画中画”效果--谈IFRAME标签的使用
作者:秋实 文章来源:天极网页陶吧 纵观时下网站,本来网速就有些慢,可是几乎每页都要放什么Banner,栏目图片,版权等一大堆雷同的东西,当然,出于网站风格统一、广告效应的需要&…
Cognitive Inference:认知推理下的常识知识库资源、常识推理测试评估与中文实践项目索引...
作者 | 刘焕勇责编 | 李雪敬出品 | CSDN博客CognitiveInferenceCognitive Inference,认知推理、常识知识库、常识推理与常识推理评估的系统项目,以现有国内外已有的常识知识库为研究对象,从常识知识库资源建设和常识推理测试评估两个方面出发…

敏捷开发实践总结(二):关于测试
用了两个冲刺周期,我们组算是把敏捷开发的测试流程给捋顺了。这里对我们的测试,以及敏捷开发中的测试做一个小结。一、开发组一定不能讳疾忌医。作为开发人员,一定要秉着这个出发点去看待测试。业务测试测试组测试,自测࿰…

手机网站的几点注意
http://www.haorooms.com/post/phone_web转载于:https://www.cnblogs.com/momox/p/6252679.html

HEAD元素使用集锦
作者:火焰鸟 文章来源:大众网络报 HTML文档由两部分组成:Head(主题部分,一般来说是不可见的)和Body(正文部分,在浏览器中是可见的)。随着FrontPage及Dreamweaver&…