当前位置: 首页 > article >正文

【Python】 glob批处理模块的学习

1.什么是glob模块?

  • 在 Python 中,glob模块是一个用于文件路径名的模式匹配的工具。它使用简单的通配符规则来匹配文件和目录的路径,这些通配符规则类似于在命令行中使用的文件搜索规则。这使得在处理文件系统中的多个文件或目录时非常方便,可以快速地获取符合特定模式的文件路径列表。

2. 通配符规则

  • *(星号)通配符
  • 示例:假设在当前目录下有file1.txtfile2.txtdata.csvreport.docx这些文件。使用glob.glob('*.txt')将返回['file1.txt', 'file2.txt'],它只会匹配扩展名为.txt的文件。
  • 功能:*可以匹配任意长度(包括零长度)的字符序列。例如,*.txt表示匹配所有以.txt为扩展名的文件,不管文件名的前面部分是什么。

  • ?(问号)通配符
    • 功能:?可以匹配任意单个字符。例如,file?.txt会匹配像file1.txtfile2.txt等文件名,其中?的位置可以是任意一个字符。

    • 示例:如果有file1.txtfile2.txtfileA.txtdata.txt这些文件,glob.glob('file?.txt')将返回['file1.txt', 'file2.txt', 'fileA.txt'],它匹配文件名是file后面跟着一个字符且扩展名为.txt的文件。

  • [](方括号)通配符
    • 功能:[]用于匹配方括号内指定的一组字符中的任意一个。例如,file[123].txt会匹配file1.txtfile2.txtfile3.txt

    • 示例:假设有file1.txtfile2.txtfile4.txtfileA.txt这些文件,glob.glob('file[123].txt')将返回['file1.txt', 'file2.txt'],只匹配文件名中file后面跟着123且扩展名为.txt的文件。

3.glob模块的主要函数

    • glob.glob()函数

    • 功能:该函数返回所有匹配指定模式的文件路径的列表。它接受一个表示路径模式的字符串作为参数,在当前目录以及子目录(如果模式包含目录遍历相关的部分)中搜索匹配的文件路径。
    • 示例:搜索当前目录下所有的 Python 文件:
         import glob
         python_files = glob.glob('*.py')
         print(python_files)

搜索指定目录下(例如data目录)所有的.csv文件:

         import glob
         csv_files_in_data_dir = glob.glob('data/*.csv')
         print(csv_files_in_data_dir)

glob.iglob()函数

  • 功能:这是一个生成器函数,它与glob.glob()类似,用于返回匹配指定模式的文件路径。但是,它返回的是一个生成器对象,而不是一个列表。这样在处理大量文件路径时,可以节省内存,因为生成器是按需生成元素的,而不是一次性生成所有元素。
  • 示例:
       import glob
       for file_path in glob.iglob('*.jpg'):
           print(file_path)

这个示例会逐个打印出当前目录下所有匹配*.jpg模式的文件路径,而不是将所有路径存储在一个列表中再处理。

使用glob模块的注意事项

  • 路径的相对性质glob函数所使用的路径模式是相对路径,默认是相对于当前工作目录的。如果需要指定绝对路径,需要在模式字符串中提供完整的路径信息。例如,要搜索根目录下的/var/log目录中的.log文件,可以使用glob.glob('/var/log/*.log')

  • 目录的遍历:当模式中包含目录遍历部分(如**)时,要注意性能问题。例如,**/*.txt会遍历当前目录及其所有子目录来查找.txt文件,这在目录结构复杂且文件数量众多时可能会消耗较多的时间和资源。在 Python 3.5 及以上版本中,**用于递归地匹配目录。

  • 区分大小写:在大多数操作系统中,glob模块的匹配是区分大小写的。例如,*.TXT不会匹配名为file.txt的文件,只会匹配扩展名为.TXT的文件(如果有的话)。


http://www.kler.cn/a/461625.html

相关文章:

  • w~多模态~合集1
  • STM32 + 移远EC800 4G通信模块数传
  • 机器学习 学习知识点
  • 概率论与数理统计
  • Datawhale AI冬令营 动手学AI Agent
  • SQL-leetcode-197. 上升的温度
  • 如何使用C++ 实现类似 Qt 的信号与槽机制
  • 碰一碰矩阵发视频的技术开发,支持OEM
  • I.MX6ULL-GPT实现延时
  • 亚矩阵云手机技术形态与应用方向
  • STM32闭环控制直流电机和LCD界面方案
  • 路由器和交换机之作用、区别(The Role and Difference between Routers and Switches)
  • sqoop将MySQL数据导入hive
  • Python的秘密基地--[章节8] Python 数据科学与机器学习
  • 【GeekBand】C++设计模式笔记17_Mediator_中介者模式
  • Elasticsearch:normalizer
  • 快速将一个项目的 `package.json` 中的所有模块更新到最新版本
  • SQL进阶技巧:如何计算相互连接的计算机组成的集合?
  • CSS2笔记
  • 【LeetCode: 100. 相同的树 + 二叉树 + 递归】
  • 112、Qt MSVC编译Qtxlsx
  • 【中间件】docker+kafka单节点部署---zookeeper模式
  • Java安全—SpringBootJWT身份权鉴打包部署
  • 地理数据库Telepg面试内容整理-如何在高并发情况下保证GIS服务的高可用性?
  • VMware安装Windows11虚拟机,图文详细,附免费资源,持续更新
  • 常用的linux命令介绍