在Python中,快速匹配文件名可通过以下两种常用方法实现,根据需求选择合适的方式:
一、使用 `glob` 模块(适用于简单模式匹配)
`glob` 模块支持 Unix 风格的通配符,适合快速查找符合简单模式的文件或目录。
基本用法
匹配文件扩展名 使用 `glob.glob()` 函数配合 `*` 通配符可查找特定扩展名的文件。例如:
```python
import glob
txt_files = glob.glob('*.txt')
print(txt_files) 输出当前目录下所有 .txt 文件
```
若需匹配多个扩展名,可用逗号分隔模式,如 `*.txt,*.doc`。
递归匹配目录结构
添加 `recursive=True` 参数可递归搜索子目录。例如:
```python
py_files = glob.glob('/*.py', recursive=True) print(py_files) 包含当前目录及所有子目录下的 .py 文件 ``` 高级功能 字符集匹配: 使用方括号 `[]` 指定字符范围,如 `[a-z]` 匹配所有小写字母,`[0-9]` 匹配数字。 排除特定字符
二、使用 `fnmatch` 模块(适用于复杂模式匹配)
`fnmatch` 模块支持 Unix 风格通配符,并提供大小写敏感/不敏感的匹配选项,适合更复杂的文件名模式匹配。
基本用法
基础通配符 `*`:匹配零个或多个字符(如 `*.txt` 匹配所有 `.txt` 文件)。
`?`:匹配单个字符(如 `conf?.log` 匹配 `confa.log`、`confb.log` 等)。
`[]`:匹配字符集(如 `[a-z]ut` 匹配 `iot` 或 `out`)。
字符范围与特殊序列
`[0-9]`:匹配数字,如 `log.2024.csv`。
`{pattern1, pattern2}`:匹配多个模式,如 `{*.txt, *.doc}` 匹配所有 `.txt` 和 `.doc` 文件。
大小写敏感/不敏感匹配
`fnmatch.fnmatch()`:默认区分大小写(如 `*.txt` 在Windows上不匹配 `TXT`)。
`fnmatch.fnmatchcase()`:强制区分大小写。
实战示例
```python
import fnmatch
import os
检查文件名是否匹配模式
filename = "example.txt"
pattern = "*.txt"
if fnmatch.fnmatch(filename, pattern):
print(f"{filename} 匹配 {pattern}")
从文件列表中筛选匹配项
files = ["test.txt", "demo.py", "hello.txt", "world.jpg"]
txt_files = fnmatch.filter(files, "*.txt")
print(txt_files) 输出: ['test.txt', 'hello.txt']
```
三、注意事项
路径问题:
使用相对路径时需注意当前工作目录,建议使用绝对路径以提高可移植性。
性能优化:
对于大型目录结构,`os.walk()` 结合 `fnmatch` 或 `glob` 可高效遍历文件。
操作系统差异:
`fnmatch` 在 Windows 上默认不区分大小写,而在 Linux 上区分。
通过以上方法,可灵活实现文件名匹配,提升文件操作效率。