Python3标准库glob文件名模式匹配详解

雨后青山
雨后青山
发布时间:2026-10-13 | 4人浏览过
原创

本文深入解析Python3标准库glob模块的文件名模式匹配机制。glob遵循UNIX路径扩展规则,支持星号(*)匹配多字符、问号(?)匹配单字符及字符区间[0-9]等用法。文章通过具体代码示例演示如何递归查找子目录文件,并介绍利用glob.escape()处理包含特殊元字符的文件名,帮助开发者高效实现文件系统扫描与文件筛选。

glob模块概述

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

若这些文件尚不存在,请在运行后续示例前使用示例代码创建它们。

通配符使用

1.2 通配符

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


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

该模式会匹配目录test_files中的所有路径名(文件或目录),但不会进一步递归搜索子目录。由于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))

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

在此例中,两种做法的结果一致。若存在其他子目录,通配符将匹配这两个子目录,且两个子目录中的文件名均会出现在结果中。

单字符通配符

1.3 单字符通配符

问号(?)同样是一个通配符,它用于匹配文件名中该位置的单个字符。


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

前例将匹配以file开头,后接任意单个字符,最后以.txt结尾的所有文件名。

字符区间匹配

1.4 字符区间

若使用字符区间([a-z])替代问号,则可匹配多个字符中的某一个。以下示例查找名字中扩展名前有一个数字的所有文件。


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

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

转义元字符

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文件名模式匹配的问题的文章就介绍到这了,更多相关python glob 文件名匹配内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表