经典说说大全-经典句子大全-灵儿心情网

经典说说大全-经典句子大全-灵儿心情网

如何快速匹配文件名字

59

在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]` 匹配数字。

排除特定字符:结合 `!` 符号,如 `data_[0-9]*.csv` 匹配 `data_` 开头、后跟数字的 `.csv` 文件。

二、使用 `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 上区分。

通过以上方法,可灵活实现文件名匹配,提升文件操作效率。