Python(Unix)中的Unix样式路径名模式扩展

程序多次需要遍历文件系统中的文件列表,通常其名称与模式匹配。glob模块可用于在特定目录中创建具有特定扩展名或具有特定字符串作为文件名一部分的文件。

glob模块功能使用的模式匹配机制遵循UNIX路径扩展规则。该模块虽然不会扩展波浪号(〜)和shell变量。

Glob模块中主要有三个功能

glob()

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

默认情况下,此函数的递归参数为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

逃逸()

此函数转义给定字符。当带有某些字符的文件需要作为名称的一部分时,这很有用。以下示例搜索在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