您的位置:

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() 函数可用于文件名模式匹配任务中的 shell 和 tilde 变量扩展。

模式规则

如果我们中的任何人认为我们可以定义或使用任何模式来执行模式匹配文件名任务,那么让我们在这里澄清这是不可能的。我们不能定义任何模式或使用任何模式来收集具有相同的文件列表。在为 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. 逃避()

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

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

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


iglob(pathname, *, recursive=False)

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

(I)pathname:pathname 参数是函数的可选参数,我们甚至可以在处理与我们的 Python 安装位置相同的文件目录时将其留下。我们必须定义路径名,从中收集遵循类似模式(也在函数中定义)的文件列表。

(ii)递归:它也是 iglob()函数的可选参数,其中只取 bool 值(真或假)。递归参数用于设置函数是否遵循递归方法来查找文件名。

*(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: 看看下面这个实现了 glob()函数的 Python 程序:


# 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

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

3。escape()函数:escape()变得非常有影响力,因为它允许我们转义给定的字符序列,这是我们在函数中定义的。escape()函数对于查找文件名中有特定字符(我们将在函数中定义)的文件非常方便。它将通过匹配文件名中的任意字面值字符串和其中的特殊字符来匹配序列。

语法:

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


>> escape(pathname)

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

示例 3: 看看下面这个实现了 escape()函数的 Python 程序:


# 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()序列定义了一个字符序列,这样 escape()函数将收集所有包含该特殊字符序列的文件名。我们使用了一个嵌套的 for循环,首先,我们从 escape()函数创建了 glob()函数的路径名。之后,我们使用 glob()函数中的路径名来打印与前面定义的特殊字符序列相匹配的文件名列表。

正如我们在输出中所看到的,我们在程序中定义的所有文件名的名称中都有特殊的字符序列。

结论

所以,由于我们已经使用了 glob 模块的函数,即 glob(),escape()和 iglob()函数,我们现在可以很容易地理解 glob 模块及其函数的功能。这样,我们还可以描述 glob 模块如何非常有助于执行文件名模式匹配任务,以及我们如何获得遵循特定模式的所有文件的列表。