Python Glob模块

Python Glob模块

在Python中,我们有许多内置模块用于执行各种任务,其中之一是使用Python模块找到和定位我们系统中存在的所有文件,这些文件遵循相似的模式。这个相似的模式可以是文件扩展名,文件名的前缀,或两个或多个文件之间的任何相似之处。我们有许多不同的Python模块,可以使用Python程序轻松执行此任务,但并非所有模块都像其他模块一样高效。在本教程中,我们将学习一种高效的模块,即Python中的glob模块,通过在程序中使用它,我们可以使用特定模式进行文件匹配。我们将详细了解Python中的glob模块,如何在程序中使用它,它的主要特点以及该模块的应用。

Python中的Glob模块

借助Python的glob模块,我们可以搜索所有的路径名,以查找与我们定义的特定模式(即我们定义的模式)匹配的文件。文件匹配的指定模式根据Unix Shell指定的规则进行定义。按照这些规则匹配特定模式文件后得到的结果按程序输出的任意顺序返回。在使用文件匹配模式时,我们必须满足glob模块的一些要求,因为该模块可以遍历本地磁盘的某个位置的文件列表。该模块通常只会遍历那些遵循特定模式的磁盘文件列表。

模式匹配函数

在Python中,我们有几个函数可以用来列出与我们在程序中定义的特定模式匹配的文件。借助这些函数,我们可以获得在输出中以任意顺序匹配给定模式的指定文件夹中的文件的结果列表。

我们将在本节中讨论以下几个函数:

  1. fnmatch()
  2. scandir()
  3. path.expandvars()
  4. path.expanduser()

以上给出的列表中的前两个函数, fnmatch.fnmatch()os.scandir()函数 实际上用于执行模式匹配任务,而不是通过在Python中调用子shell来完成。这两个函数执行模式匹配任务,并以任意顺序获取所有文件名的列表。需要注意的是,glob模块对于以点(.)开头的文件名视为特殊情况,而在 fnmatch.fnmatch()函数 中几乎不会出现这种情况。

列表中给出的最后两个函数是 os.path.expandvars()os.path.expanduser() 函数,可用于在文件名模式匹配任务中进行变量扩展。

模式的规则

如果有人认为我们可以定义或使用任何模式来执行模式匹配文件名任务,那么让我们在这里澄清,这是不可能的。我们不能定义任何模式或使用任何模式来收集具有相同模式的文件列表。在定义glob模块中的文件名模式匹配函数的模式时,我们必须遵循一组特定的规则。

在这一部分,我们将讨论在为文件名模式匹配函数定义模式时需要牢记和遵守的规则。我们将只简要讨论这些规则,并不深入剖析它们,因为它们不是本教程的主要重点。

以下是在glob模块的模式匹配函数中定义的模式的一组规则:

  • 我们必须遵循UNIX路径扩展的所有标准规则进行模式匹配。
  • 我们在模式中定义的路径应该是绝对或相对的,不能在模式中定义任何不明确的路径。
  • 模式中允许的特殊字符只有两个通配符,即’*’和’?’,模式中可以表达的正常字符以[]表示。
  • 用于glob模块函数的模式规则应用于文件中的文件名段(在函数中提供的文件),并且会停在文件的路径分隔符’/’处。

这些是我们在定义用于文件名模式匹配任务的glob模块函数中的模式时的一些常规规则,为了成功执行任务,我们必须遵守这组规则。

Glob模块的应用

我们已经讨论过当我们在磁盘上寻找相似文件时,模式匹配是非常有帮助的。在这里,我们将讨论 glob 模块的应用以及它对我们非常有帮助。

以下是Python glob模块的一些应用,并且我们可以在给定函数中使用这个模块:

  1. 有时,我们想要搜索一个具有特定前缀的文件,许多文件名中间有相同的公共字符串,或者具有相同的特定扩展名的文件。现在,为了执行这个任务,我们可能需要编写一个将扫描整个目录并产生结果的代码。相反,使用 glob模块 在这种情况下非常有帮助,因为我们可以使用glob模块的功能并轻松执行此任务,节省时间。
  2. 除此之外,当我们的程序需要查找给定文件系统中所有文件的列表,并且这些文件的名称匹配相似模式时, glob模块 也非常有用。glob模块可以轻松执行此任务,而无需在其他子shell中打开程序的结果。

因此,通过查看glob模块的应用,我们可以说这个模块对我们非常重要,我们可以在其中使用它来减少代码的复杂性并节省时间。

Glob模块函数

现在,我们将讨论glob模块的各种更多函数,并了解它们在Python程序中的工作方式。我们还将学习这些函数如何帮助我们完成模式匹配任务。看一下我们在glob模块中拥有的以下函数列表,借助这些函数,我们可以顺利进行文件名模式匹配任务:

  1. iglob()
  2. glob()
  3. escape()

现在,我们将简要讨论这些函数,然后通过在Python程序中使用它们来了解这些函数的实现方式。我们将在一个示例程序中使用上述给定的每个函数,并在输出中获取遵循相似模式的文件名列表(该模式将在函数中定义)。

1. iglob()函数: glob模块的iglob()函数非常有用,可以在输出中产生列表文件的任意值。我们可以使用iglob()方法创建一个Python生成器。我们可以使用由glob模块创建的Python生成器来列出给定目录下的文件。当调用此函数时,它还返回一个迭代器,由它返回的迭代器在不同时存储所有文件名的情况下产生值(文件列表)。

语法: 以下是在Python程序中使用glob模块的iglob()函数的语法:

iglob(pathname, *, recursive=False)

如我们在 iglob() 函数的语法中所看到的,它共有三个参数,可以定义如下:

(i) pathname: pathname 参数是该函数的可选参数,当我们在与所安装 Python 的文件目录相同时,甚至可以将其留空。我们必须定义要从中收集文件列表的路径名(该路径名也在函数内部定义了相似模式)。

(ii) recursive: 这也是 iglob() 函数的可选参数,它仅接受 bool 值(true 或 false)。recursive 参数用于设置函数是否采用递归方法来查找文件名。

(iii) ‘*’: 这是 iglob() 函数的必填参数,这里我们需要定义 iglob() 函数将收集的文件名的模式,并在输出中列出它们。我们在 iglob() 函数中定义的模式(例如文件的扩展名)应以 ‘*’ 符号开始。

现在,让我们使用这个 iglob() 函数在一个示例程序中,以便更好地理解它的实现和功能。

示例1:

请查看下面具有 iglob() 函数实现的 Python 程序:

# Import glob module in the program
import glob as gb
# Initialize a variable
inVar = gb.iglob("*.py") # Set Pattern in iglob() function
# Returning class type of variable
print(type(inVar))
# Printing list of names of all files that matched the pattern
print("List of the all the files in the directory having extension .py: ")
for py in inVar: 
    print(py)

输出:

<class 'generator'>
List of the all the files in the directory having extension .py: 
adding.py
changing.py
code#1.py
code#2.py
code-3.py
code-4.py
code.py
code37.py
code_5.py
code_6.py
configuring.py

解释:

首先我们导入glob模块,以便在程序中使用其iglob()函数。然后,我们初始化一个变量,其中使用了iglob()函数,并在iglob()函数内定义了函数将执行的文件名模式匹配的模式。我们在iglob()函数中定义的模式是所有扩展名为 .py 的文件,即 “*.py” 。然后,我们返回了初始化的变量的类类型。然后,我们在变量上使用了一个for循环,以打印出与我们在iglob()函数中定义的模式匹配的所有文件名的列表。

正如我们在输出中看到的那样,第一个程序打印了初始化变量的类类型,然后打印了具有 .py 扩展名的文件列表。

2. glob()函数: 借助于glob()函数,我们还可以获取与特定模式匹配的文件列表(我们必须在函数内定义该特定模式)。glob()函数返回的列表将是一个字符串,应该包含根据我们在函数内定义的路径定义的路径规范。 glob()函数的字符串或迭代器实际上返回的是与iglob()函数返回的相同值,而不实际在其中存储这些值(文件名)。

语法:

下面是在Python程序中使用glob模块的glob()函数的语法:

glob(pathname, *, recursive = True)

正如我们可以在glob()函数的语法中看到的那样,它也有三个参数,和iglob()函数一样。glob()函数中定义的三个参数与我们在上面读到的iglob()函数中的参数是相同的。现在,让我们在一个示例程序中使用这个glob()函数,以便我们可以更好地理解它的实现和功能。

示例2: 看下面的Python程序,其中实现了glob()函数:

# Import glob module in the program
import glob as gb
# Initialize a variable
genVar = gb.glob("*.py") # Set Pattern in glob() function
# Printing list of names of all files that matched the pattern
print("List of the all the files in the directory having extension .py: ")
for py in genVar: 
    print(py)   

输出:

List of the all the files in the directory having extension .py: 
adding.py
changing.py
code#1.py
code#2.py
code-3.py
code-4.py
code.py
code37.py
code_5.py
code_6.py
configuring.py

如我们在上面的示例程序中所看到的那样,我们采用了与Example 1中使用iglob()函数相同的逻辑。程序返回了与我们在glob()函数中设置的模式匹配的所有文件名的列表。

3. escape()函数: escape()函数非常有用,因为它允许我们转义在函数中定义的给定字符序列。escape()函数对于定位文件名中具有特定字符(如在函数中定义的字符)的文件非常有用。它通过将文件名中的任意字面字符串与其中的特殊字符进行匹配来匹配序列。

语法:

以下是在Python程序中使用glob模块的escape()函数的语法:

>> escape(pathname)

escape()应该与glob()或iglob()函数一起使用,以便我们可以将文件名列表作为输出打印出来。现在,让我们在一个示例程序中使用这个escape()函数,以便更好地理解它的实现和功能。

示例3: 看一下下面的Python程序,其中包含escape()函数的实现:

# Import glob module in the program
import glob as gb
# Initialize a variable
charSeq = "-_#"
print("Following is the list of filenames that match the special character sequence of escape function: ")
# Using nested for loop to get the filenames
for splChar in charSeq:
    # Pathname for the glob() function
    escSet = "*" + gb.escape(splChar) + "*" + ".py"
    # Printing list of filenames with glob() function
    for py in (gb.glob(escSet)): 
        print(py) 

输出:

Following is the list of filenames that match the special character sequence of escape function: 
code-3.py
code-4.py
code_5.py
code_6.py
code#1.py
code#2.py

说明:

我们首先定义了一个字符序列,用于escape()函数收集所有具有该特殊字符序列的文件名。我们使用了一个嵌套的for循环,首先从escape()函数创建了一个用于glob()函数的路径名。然后,我们将该路径名用于glob()函数,以打印与之前定义的特殊字符序列匹配的文件名列表。

从输出中可以看到,我们有所有具有特殊字符序列的文件名,这些特殊字符序列是我们在程序中定义的。

结论

因此,由于我们使用了glob模块的函数,即glob()、escape()和iglob()函数,我们现在可以很容易地理解glob模块及其函数的功能。通过这个,我们还可以看出glob模块在执行文件名模式匹配任务和获取遵循特定模式的所有文件列表方面是非常有帮助的。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程