Python 中的 fnmatch 模块
Vaibhav Vaibhav
2023年10月10日
Python
Python Module
在处理文件和文件系统时,经常需要从一堆文件中找到几个文件。如果手动执行,从一堆文件中查找所需文件将花费很长时间。
因此,操作系统和编程语言提供了用于动态查找所需文件的实用程序。这些实用程序倾向于以文件名为目标,并尝试在模式匹配的帮助下找到必要的文件。
在诸如 macOS 和 Linux 等基于 UNIX 的操作系统中,可以借助 Python 编程语言中的 fnmatch 库来定位文件。
本文将学习如何使用 Python 的 fnmatch 库执行模式匹配。
Python 中的 fnmatch 模块
fnmatch 模块用于匹配 UNIX 操作系统 shell 样式的通配符。请注意,这些样式不是 regex 或 regular 表达式。
以下是 UNIX shell-style wildcards 中使用的特殊字符:
| 模式 | 操作 |
|---|---|
* |
匹配一切 |
? |
匹配单个字符 |
[sequence] |
匹配序列中的任何字符 |
[!sequence] |
匹配任何字符,而不是按顺序 |
fnmatch 库有以下方法:
fnmatch.fnmatch(filename, pattern)是fnmatch()方法,将文件名与指定模式匹配。如果模式匹配,则返回True;否则,假。请注意,此方法不区分大小写,并且在os.path.normcase()方法的帮助下,两个参数都被标准化为小写。fnmatch.fnmatchcase(filename, pattern)- 与fnmatch()方法非常相似,但它区分大小写并且不对参数应用os.path.normcase()方法。fnmatch.filter(names, pattern)创建与指定模式匹配的文件名列表。此方法类似于遍历所有文件名并执行fnmatch()方法,但实现效率更高。fnmatch.translate(pattern)在re.match()方法的帮助下将 shell 样式模式转换为正则表达式或正则表达式。
现在我们已经了解了一些理论,让我们在相关示例的帮助下了解如何实际使用这个库。
该示例过滤所有以 .html 扩展名结尾的文件。
import os
import fnmatch
for file in os.listdir("."):
if fnmatch.fnmatch(file, "*.html"):
print(file)
输出:
<files with ".html" extension in the current working directory>
上面的 Python 代码首先在 os.listdir() 方法的帮助下读取当前工作目录中的所有文件。接下来,它遍历所有文件并使用 fnmatch() 方法检查它们是否是 HTML 文件。
这里,*.html 模式匹配所有以 .html 结尾的文件。这里,* 是指文件名中的任意数量的字符。
让我们看另一个过滤所有以 hello 开头并以 .js 结尾的文件的示例。请参阅以下 Python 代码。
import os
import fnmatch
for file in os.listdir("."):
if fnmatch.fnmatch(file, "hello*.js"):
print(file)
输出:
<files with filenames of type "hello*.js" in the current working directory>
Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe
作者: Vaibhav Vaibhav
