Python 中的 Unix 风格路径名模式扩展 (glob)


很多时候,程序需要遍历文件系统中的文件列表,这些文件通常具有匹配某种模式的名称。glob 模块在创建特定目录中具有特定扩展名或文件名的一部分为特定字符串的文件列表方面非常有用。

glob 模块函数使用的模式匹配机制遵循 UNIX 路径扩展规则。但是,此模块不会扩展波浪号 (~) 和 shell 变量。

glob 模块主要有三个函数

glob()

此函数返回与 pathname 参数中给定模式匹配的文件列表。pathname 可以是绝对路径或相对路径。它也可以包含通配符,例如 * 和 ?。

此函数的 recursive 参数默认为 False。如果为 True,则会递归搜索当前目录的子目录以查找与给定模式匹配的文件。

以下代码打印当前目录中所有扩展名为 '.py' 的文件。

>>> import glob
>>> for file in glob.glob("*.py"):
print (file)

在以下代码中,recursive=True 参数还会导致打印子目录中扩展名为 '.py' 的文件。

>>> for file in glob.glob("*.py", recursive=True):
print (file)

模式路径名可以包含通配符字符 ?。以下语句打印名称为三个字母且前两个字母为 'pp' 的文件列表。

>>> for file in glob.glob("pp?.py"):
print (file)

以下代码打印名称以数字结尾的文件。

>>> for file in glob.glob('*[0-9].py')
print (file)

以下语法导致递归打印与给定路径匹配的文件。

>>> glob.glob('**/*.py', recursive=True)

要递归打印当前目录中的目录名称,

>>> glob.glob('tcl/**/', recursive=True)

iglob()

此函数返回一个生成器对象而不是文件列表。使用 next() 函数,可以按如下所示打印后续文件名。

>>> it=glob.iglob('*.py')
>>> type(it)
<class 'generator'>
>>> while True:
try:
file=next(it)
print (file)
except StopIteration:
break

escape()

此函数转义给定字符。当需要将包含某些字符的文件作为名称的一部分时,这非常有用。以下示例搜索具有 chars 字符串中任何字符的文件。

>>> chars='[]()#'
>>> for char in chars:
esc='*'+glob.escape(char)+'.py'
for file in (glob.glob(esc)):
print (file)
xyz[.py
pp[].py
pp(.py
pp#.py

更新于:2020年6月25日

470 次浏览

启动您的 职业生涯

完成课程获得认证

开始
广告