一、前言

大家好,又到了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办公自动化的强大!

Python办公自动化系列代码:

https://github.com/liuhuanshuo/zaoqi-Python

当然本文只是基于几个简单的需求来讲解使用Python来制作搜索文件脚本的主要方法,接下来你可以结合之前的自动化案例或以根据自己的需求添加一些其他的规则或增加新的功能,打造出一款属于你的软件!

最后还是希望大家能够理解Python办公自动化的一个核心就是「批量操作-解放双手」,让复杂的工作自动化!

[声明]本文版权归原作者所有,内容为作者个人观点,转载目的在于传递更多信息,如涉及作品内容、版权等问题,可联系本站删除,谢谢。

python 找质数的个数_用Python打造一款文件搜索工具,所有功能自己定义!相关推荐

  1. python 找质数的个数_盘一盘 Python 系列特别篇 All 和 Any

    本文含 3758 字,9图表截屏建议阅读 10 分钟 本文是 Python 系列的特别篇的第十四篇 特别篇 1 - PyEcharts TreeMap 特别篇 2 - 面向对象编程 特别篇 3 - 两 ...

  2. python做一个本地搜索工具_用Python打造一款文件搜索工具,所有功能自己定义!...

    一.前言 大家好,又到了Python办公自动化系列. 在日常的办公中,我们经常会从一堆不同格式的文件(夹)中搜索特定的文件,可能你是凭着记忆去找或是借助软件,但你有想过如何用Python实现吗?本文将 ...

  3. 用Python打造一款文件搜索工具,所有功能自己定义

    前言 在日常的办公中,我们经常会从一堆不同格式的文件(夹)中搜索特定的文件,可能你是凭着记忆去找或是借助软件,但你有想过如何用Python实现吗?本文将基于几个常见的搜索操作讲解. 扫描路径内的内容 ...

  4. 用python打造一款文件搜索工具,所有功能自己定义!

    大家好,又到了python办公自动化系列.在日常的办公中,我们经常会从一堆不同格式的文件(夹)中搜索特定的文件,可能你是凭着记忆去找或是借助软件,但你有想过如何用python实现吗? 扫描路径内的内容 ...

  5. 深挖你硬盘里的见不得人的【学习资料】,Python制作一款文件搜索工具

    前言 今天来教大家做一个文件搜索工具,专门来找你电脑里的[学习资料],嘿嘿 开发环境 解释器: Python 3.8.8 | Anaconda, Inc. 编辑器: pycharm 专业版 先演示效果 ...

  6. python字符串大写字母个数_【python实例】统计字符串里大写字母,小写字母的个数和非字母的个数...

    """ 给定一个以下字符串:统计大写字母的个数,小写字母的个数,非字母的个数. str1 = "ajdkkKDKEK1343KFKiriromfkfKKRIOW ...

  7. python统计元音字母个数_计算Python中的元音(Counting vowels in python)

    计算Python中的元音(Counting vowels in python) def main(): print(count) def countVowels(string): vowel=(&qu ...

  8. python分箱统计个数_使用python 计算百分位数实现数据分箱代码

    对于百分位数,相信大家都比较熟悉,以下解释源引自百度百科. 百分位数,如果将一组数据从小到大排序,并计算相应的累计百分位,则某一百分位所对应数据的值就称为这一百分位的百分位数.可表示为:一组n个观测值 ...

  9. python找出数组重复_在Python中使用位数组查找数组的重复项

    假设我们有n个不同数字组成的数组:n最多为32,000.该数组可能有重复的条目,我们不知道n的值是什么.现在,如果我们只有4 KB的内存,将如何显示数组中的所有重复项? 因此,如果输入类似于[2,6, ...

最新文章

  1. 8年面试官问到:数据库自增 ID 用完了会咋样?
  2. Python后端相关技术/工具栈
  3. Baby Coins
  4. boost::intrusive::function_hook用法的测试程序
  5. getCurrentPages()
  6. mysql upload_关于mysql数据库里的 upload子查询问题
  7. LeetCode之Construct the Rectangle
  8. 在Ubuntu 18.04系统上安装Java 11的方法
  9. leetcode 111
  10. 新手福音,机器学习工具Sklearn 中文文档 0.19版(最新)
  11. 一些VC的快捷键以及调试技巧
  12. \n 屏幕换行 源码换行
  13. 慕课软件质量保证与测试(习题集)
  14. 如何解决谷歌浏览器插件屏蔽问题
  15. 爬虫项目十三:用Python两分钟爬下微信公众号900篇文章
  16. 工具类ConfigTool封装Nacos Config 本地缓存(实战附代码实现)
  17. 传智播客学习之DOM基础
  18. 月薪过2w的IT程序员都是怎么做到的?
  19. 喇叭、扬声器的正负极问题
  20. Codeforces 14E Camels (DP)

热门文章

  1. fatal error C1010: unexpected end of file while...
  2. x264编码参数大测试:08 subme与指定码率(1000Kbps)
  3. 程序员到底要不要重复造轮子?
  4. 启动TOMCAT报错 java.util.zip.ZipException: invalid LOC header (bad signature)
  5. super go_Go 简单性的价值:来自对 Go 倍加青睐的谷歌软件工程师的自述
  6. 吉林大学计算机与科学专业排名,吉林大学专业排名 哪些王牌专业推荐就读
  7. python项目如何上线_django项目部署上线(示例代码)
  8. 运行时错误7内存溢出_C++程序运行时的内存模型
  9. php中dump怎么使用,php – 如何正确使用print_r或var_dump?
  10. php strip_tags 少,详解PHP函数 strip_tags的用法不足之处