[Python] glob内置模块介绍和使用场景(案例)

Unix glob是一种用于匹配文件路径的模式,它可以帮助我们快速地找到符合特定规则的文件。在本文中,我们将介绍glob的基本概念、使用方法以及一些实际应用案例。

glob介绍

Glob(Global Match)是Unix和类Unix系统中的一种文件名扩展功能,它可以根据指定的模式匹配文件名。Glob使用通配符来表示文件名中的特定字符或字符组合,例如*表示任意数量的字符,?表示一个字符,[]表示一个字符集合等。通过这些通配符,我们可以轻松地筛选出符合特定规则的文件。

如何使用glob

在Unix和类Unix系统中,我们可以使用shell内置的glob命令来匹配文件路径。

glob [选项] 模式

其中,模式是一个包含通配符的字符串,用来描述要匹配的文件名或目录名的模式。通配符可以包括以下特殊字符:

  • *:匹配任意字符(包括空字符)。
  • ?:匹配任意单个字符。
  • [字符集]:匹配字符集中的任意一个字符。
  • [!字符集]:匹配不在字符集中的任意一个字符。

可以使用引号将模式括起来,以避免特殊字符被Shell解释。

以下是一些常用的glob命令选项:

  • -d:仅匹配目录。
  • -l:仅匹配符号链接。
  • -r:递归地匹配子目录。
  • -s:匹配命令的结果总数。

Python中的glob内置模块

此外,我们还可以使用Python的glob内置模块来实现类似的功能,该模块用来以特定格式匹配一系列路径,规则与Unix Shell相同,返回一个包含匹配结果的无序列表。实现过程用到了os.scandir和fnmatch.fnmatch(),前者将文件路径输入列表,后者按规则匹配。匹配用到的主要通配符为 *, ? 和 []这三个,基本规则如下:

*: 匹配多个任意字符
?: 匹配1个任意字符
[]: 匹配[]中注明范围内的1个字符,如果要匹配特殊字符比如上面的*和?,用[*]和[?]即可

glob — Unix style pathname pattern expansion — Python 3.12.1 documentation

[Python] glob内置模块介绍和使用场景(案例)_第1张图片

主要方法:

1) glob.glob(pathname, *, root_dir=None, dir_fd=None, recursive=False, include_hidden=False)

Return a possibly empty list of path names that match pathname, which must be a string containing a path specification. 

这个方法返回一个列表,其中包含所有与指定模式匹配的文件路径。如果recursive参数为True,则会递归地搜索目录及其子目录。默认情况下,recursive参数为False。如果root_dir不为None,则返回的路径是相对于root_dir的相对路径。

2) glob.iglob(pathname, *, root_dir=None, dir_fd=None, recursive=False, include_hidden=False)

Return an iterator which yields the same values as glob() without actually storing them all simultaneously.

这个方法返回一个迭代器,其中包含所有与指定模式匹配的文件路径。如果recursive参数为True,则会递归地搜索目录及其子目录。默认情况下,recursive参数为False。如果root_dir不为None,则返回的路径是相对于root_dir的相对路径。

3) glob.escape(pathname)

这个方法将路径名中的特殊字符转义,以便在正则表达式中使用。例如,它会将*替换为\*,将?替换为\?等。

以下是一个简单的示例:

import glob

# 查找当前目录下所有的.txt文件
txt_files = glob.glob('*.txt')
print(txt_files)

不足之处

glob模块只能做比较简单的匹配查询,不支持同时查询多个文件扩展名,比如.txt和.md文件,需要做2次查询,然后把2次结果进行合并,这样无形中降低了查询的效率。

使用案例

下面我们来看一些实际的使用案例:

查找当前目录下所有以a、b、c开头的目录

glob -d [abc]*

查找所有以.txt结尾的文件

$ glob *.txt
file1.txt
file2.txt
file3.log

Python中使用glob模块查找当前目录的所有以.txt结尾的文件

import glob

txt_files = glob.glob('*.txt')
print(txt_files)

Python中使用glob模块查找指定目录及其子目录下的所有以.txt 结尾的文件

import glob

txt_files = glob.glob('*.txt', root_dir='C:/ABC', recursive=True)
print(txt_files)

 

你可能感兴趣的:(python,python,glob,文件查找)