Python3标准库glob文件名模式匹配的问题

作者:爱编程的小灰灰 时间:2021-08-29 14:00:23 

1. glob文件名模式匹配

尽管glob API很小,但这个模块的功能却很强大。只要程序需要查找文件系统中名字与某个模式匹配的一组文件,就可以使用这个模块。要创建一个文件名列表,要求其中各个文件名都有某个特定的扩展名、前缀或者中间都有某个共同的字符串,就可以使用glob而不用编写定制代码来扫描目录内容。

glob的模式规则与re模块使用的正则表达式并不相同。实际上,glob的模式遵循标准UNIX路径扩展规则。只使用几个特殊字符来实现两个不同的通配符和字符区间。模式规则应用于文件名中的段(在路径分隔符/处截止)。

1.1 实例数据

本节中的示例假定当前工作目录中存在以下测试文件。


test_files
test_files/file.txt
test_files/file1.txt
test_files/file2.txt
test_files/filea.txt
test_files/fileb.txt
test_files/subfiles
test_files/subfiles/subfile.txt

如果这些文件不存在,请glob_maketestdata.py在运行以下示例之前使用示例代码创建它们。

Python3标准库glob文件名模式匹配的问题

1.2 通配符

星号(*)匹配一个文件名段中的0个或多个字符。例如,test_files/*。


import glob
for name in sorted(glob.glob('test_files/*')):
 print(name)

这个模式会匹配目录test_files中的所有路径名(文件或目录),但不会进一步递归搜索到子目录。glob()返回的数据不会排序,所以这里的实例会进行排序以便研究结果。

Python3标准库glob文件名模式匹配的问题

要列出子目录中的文件,必须把子目录包含在模式中。


import glob
print('Named explicitly:')
for name in sorted(glob.glob('test_files/subfiles/*')):
 print(' {}'.format(name))
print('Named with wildcard:')
for name in sorted(glob.glob('test_files/*/*')):
 print(' {}'.format(name))

前面显示的第一种情况显式列出了子目录名,第二种情况则依赖一个通配符来查找目录。

Python3标准库glob文件名模式匹配的问题

在这里,两种做法的结果是一样的。如果还有另一个子目录,则通配符会匹配这两个子目录,并且两个子目录中的文件名都会出现在结果中。

1.3 单字符通配符

问号(?)也是一个通配符。它会匹配文件名中该位置的单个字符。


import glob
for name in sorted(glob.glob('test_files/file?.txt')):
 print(name)

前面的例子会匹配以file开头,然后是另外一个任意字符,最后以.txt结尾的所有文件名。

Python3标准库glob文件名模式匹配的问题

1.4 字符区间

如果使用字符区间([a-z])而不是问号,则可以匹配多个字符中的一个字符。下面这个例子会查找名字中扩展名前有一个数字的所有文件。


import glob
for name in sorted(glob.glob('test_files/*[0-9].*')):
 print(name)

字符区间[0-9]会匹配所有单个数字。区间根据各字母/数字的字符码排序,短横线指示连续字符组成的一个不间断区间。这个区间值也可以写为[0123456789]。

Python3标准库glob文件名模式匹配的问题

1.5 转义元字符

有时有必要搜索名字中包含一些特殊元字符的文件,glob使用这些特殊元字符表示模式。escape()函数会建立一个适合的模式,其中的特殊字符会被“转义”,使它们不会被glob扩展或解释为特殊字符。


import glob
specials = '?*['
for char in specials:
 pattern = 'test_files/*' + glob.escape(char) + '.txt'
 print('Searching for: {!r}'.format(pattern))
 for name in sorted(glob.glob(pattern)):
   print(name)
 print()

可以通过构建一个包含单个元素的字符区间来转义各个特殊字符。

Python3标准库glob文件名模式匹配的问题

来源:https://www.cnblogs.com/liuhui0308/archive/2020/03/13/12458860.html

标签:python,glob,文件名
0
投稿

猜你喜欢

  • 功能强大的php分页函数

    2023-11-15 03:17:37
  • python中xlwt模块的具体用法

    2023-11-08 07:10:15
  • Python中return用法案例详解

    2022-09-09 10:35:40
  • wxPython实现分隔窗口

    2022-11-29 20:45:05
  • Window10下python3.7 安装与卸载教程图解

    2021-02-15 16:23:54
  • Python高级特性 切片 迭代解析

    2022-03-28 14:32:49
  • PDO::rollBack讲解

    2023-07-23 06:52:34
  • sql不常用函数总结以及事务,增加,删除触发器

    2012-07-11 16:03:42
  • pytorch 彩色图像转灰度图像实例

    2023-08-02 17:28:37
  • 比较详细的Asp伪静态化方法及Asp静态化探讨

    2011-04-14 10:41:00
  • Python3.5迭代器与生成器用法实例分析

    2022-11-03 14:50:47
  • Numpy中的mask的使用

    2022-06-10 19:33:11
  • python_tkinter弹出对话框创建2

    2023-10-17 06:27:29
  • python3.5绘制随机漫步图

    2022-08-12 14:16:13
  • 如何使用python实现模拟鼠标点击

    2022-07-07 21:46:57
  • python sklearn常用分类算法模型的调用

    2021-06-18 11:42:25
  • 简单了解Python字典copy与赋值的区别

    2022-07-16 11:35:52
  • HTML5 声明兼容IE的写法

    2011-06-06 10:34:00
  • Python使用百度API上传文件到百度网盘代码分享

    2023-08-05 02:38:52
  • Go中函数的使用细节与注意事项详解

    2023-10-15 01:02:32
  • asp之家 网络编程 m.aspxhome.com