python的glob.glob()函数递归匹配文件或目录

python自带的glob模块用于查找符合特定规则的文件路径名。这个模块主要提供了一个函数glob(),它返回一个列表,包含了所有匹配特定模式的文件路径。跟pathlib.Path.glob是类似的功能,两者之间也有明显的区别。

  • glob.glob():是一个函数可以直接调用,函数返回一个list,包括匹配到的文件或目录名。
  • pathlib.Path.glob():需要先初始化Path类,然后调用glob函数,返回的是yield生成器,并且返回的是文件路径对象。超大型的文件目录可以建议使用pathlib.Path.glob。

glob.glob()函数介绍

使用时先导入glob模块:

复制代码
import glob

glog.glob函数源码如下:适配python3.12版本,不同的版本参数可能不同。

参数介绍:

1)pathname:一个字符串,表示要匹配的文件模式。

  • '*':匹配给定路径下所有的文件和目录(*不会递归查找子目录)。
  • '*.txt':匹配给定路径下所有以.txt结尾的文件(不会递归查找子目录)。
  • 'a/*.csv':匹配a目录下所有以.csv结尾的文件。
  • '**':匹配当前目录及其所有子目录下的文件和目录(**支持递归)。
  • '**/*.py':匹配当前目录及其所有子目录下所有以.py结尾的文件(**支持递归)。
  • '?.txt':匹配所有单个字符文件名并以.txt结尾的文件(例如a.txt,但不包括ab.txt)。
  • '[abc].txt':匹配a.txt、b.txt或c.txt。

2)root_dir:默认为None,使用当前目录;传入其他目录,比如"D:"表示在传入的目录中查找。

3)recursive:默认为False,参数为True和pathname包含**时,会递归地查找所有子目录中的文件。

4)Include_hidden:默认为False,参数为True时会查找隐藏的目录。

举例:

1)查找某个目录中的python文件

复制代码
for file in glob.glob('*.py',root_dir='D:\Python37\Scripts'):  
  print(file)

2)递归查找某个目录及所有子目录中的python文件

复制代码
for file in glob.glob('**/*.py',root_dir='D:\Python37\Scripts',
                      recursive=True):
  print(file)

3)查找某个目录中的隐藏的所有文件

复制代码
for file in glob.glob('*',root_dir='D:\Python37\Scripts',
                      include_hidden=True):
  print(file)

Path.glob(pattern)函数

返回与给定模式匹配的所有文件路径对象;这个方法返回的是一个生成器,可通过for循环访问。

参数pattern解释:pattern是一个字符串,用于指定要搜索的文件模式,有些类似于re模块对应的正则表达式,支持像通配符*,代表单个字符的?等。

以下是一些pattern参数的示例:

  • '*':匹配给定路径下所有的文件和目录(*不会递归查找子目录)。
  • '*.txt':匹配给定路径下所有以.txt结尾的文件(不会递归查找子目录)。
  • 'a/*.csv':匹配a目录下所有以.csv结尾的文件。
  • '**':匹配当前目录及其所有子目录下的文件和目录(**支持递归)。
  • '**/*.py':匹配当前目录及其所有子目录下所有以.py结尾的文件(**支持递归)。
  • '?.txt':匹配所有单个字符文件名并以.txt结尾的文件(例如a.txt,但不包括ab.txt)。
  • '[abc].txt':匹配a.txt、b.txt或c.txt。

测试代码:先初始化Path类,传入参数Path.cwd(),表示当前路径。

1)使用glob函数匹配特定的python文件。

复制代码
path_ins= Path(Path.cwd())
for i in path_ins.glob('*.py'):
  print(f'路径:{i}')

2)使用glob函数匹配所有的文件和目录。

复制代码
path_ins= Path(Path.cwd())
for i in path_ins.glob('*'):
  print(f'路径:{i}')

3)使用glob函数匹配当前目录及所有子目录下的所有文件和文件夹。

复制代码
path_ins= Path(Path.cwd())
for i in path_ins.glob('**'):
  print(f'路径:{i}')

共勉: 东汉·班固《汉书·枚乘传》:"泰山之管穿石,单极之绠断干。水非石之钻,索非木之锯,渐靡使之然也。"

-----指水滴不断地滴,可以滴穿石头;

-----比喻坚持不懈,集细微的力量也能成就难能的功劳。

----感谢读者的阅读和学习,谢谢大家。

相关推荐
一切尽在,你来4 分钟前
C++ 零基础教程 - 第 5 讲 变量和数据类型
开发语言·c++
0思必得013 分钟前
[Web自动化] Selenium处理Cookie
前端·爬虫·python·selenium·自动化
喵手14 分钟前
Python爬虫实战:房价/租金指数时间序列爬虫实战 - 从多页采集到趋势分析的完整方案(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·房价/租金指数时间序列·多页采集到趋势分析·采集结果sqlite到处
serve the people17 分钟前
python环境搭建 (六) Makefile 简单使用方法
java·服务器·python
萧曵 丶22 分钟前
懒加载单例模式中DCL方式和原理解析
java·开发语言·单例模式·dcl
℡枫叶℡23 分钟前
C# - 指定友元程序集
开发语言·c#·友元程序集
阿猿收手吧!31 分钟前
【C++】constexpr动态内存与双模式革命
开发语言·c++
IT北辰39 分钟前
基于Vue3+python+mysql8.0的财务凭证录入系统,前后端分离完整版(可赠送源码)
python·vue
小小码农Come on43 分钟前
QT开发环境安装
开发语言·qt
云深处@1 小时前
【C++】哈希表
开发语言·c++