`import fnmatch` 是 Python 中导入标准库模块 `fnmatch` 的语句

import fnmatch 是 Python 中导入标准库模块 fnmatch 的语句。该模块用于基于 Unix shell 风格通配符(如 *?[abc])进行文件名或字符串的模式匹配,常用于文件过滤(例如配合 os.listdir() 使用),但不支持正则表达式语法

常用函数包括:

  • fnmatch.fnmatch(filename, pattern):判断单个字符串是否匹配通配符模式(区分大小写,Windows 下默认不区分);
  • fnmatch.fnmatchcase(filename, pattern):严格区分大小写的匹配;
  • fnmatch.filter(names, pattern):对字符串列表进行批量匹配筛选;
  • fnmatch.translate(pattern):将 shell 通配符模式转换为等价的正则表达式(供高级使用)。

示例:

import fnmatch
import os

files = os.listdir('.')
py_files = fnmatch.filter(files, "*.py")
print(py_files)  # 输出所有以 .py 结尾的文件名

注意:fnmatch 适用于简单模式匹配;如需复杂逻辑,请使用 re 模块。

fnmatchre(正则表达式)模块在 Python 中都用于模式匹配,但设计目标、语法能力与适用场景有本质区别:

核心区别总结:

维度fnmatchrere 模块)
设计目的模拟 Unix shell 通配符(如 *.txt, file[0-9].log),专为文件名/简单字符串匹配优化提供通用、强大、图灵完备的正则表达式引擎,适用于任意文本结构解析
语法风格Shell 风格:*(任意字符序列)、?(单个任意字符)、[abc][a-z](字符类)PCRE 衍生语法:.*.+\d^$、分组 ( )、捕获、断言、贪婪/非贪婪等
功能能力❌ 不支持捕获组、反向引用、零宽断言、替换、编译复用(虽可 fnmatch.translate() 转正则,但非原生)
✅ 简单、安全、轻量,无注入风险(不执行任意代码)
✅ 支持捕获、替换(re.sub)、编译缓存(re.compile)、多标志(re.IGNORECASE)、性能优化(预编译)
⚠️ 复杂正则易写错,过度使用可能影响可读性与性能
典型用途os.listdir() 过滤文件名、glob.glob() 底层支撑、配置项通配匹配(如日志轮转规则)文本抽取(邮箱、URL、JSON 字段)、格式校验(密码强度、手机号)、日志解析、HTML/XML 片段提取等
大小写敏感性取决于平台:Windows 默认不区分,Linux/macOS 区分;可用 fnmatchcase() 强制区分默认区分,通过 re.IGNORECASE 标志控制

📌 一句话概括

fnmatch 是「轻量级文件名通配器」,追求简洁与安全性;
re 是「工业级文本处理引擎」,追求表达力与灵活性。

示例对比(匹配以 test 开头、下划线后接数字、以 .py 结尾的文件):

import fnmatch, re

name = "test_123.py"

# fnmatch —— 简洁直观
print(fnmatch.fnmatch(name, "test_[0-9]*.py"))  # True(注意:[0-9]* 中 * 是 fnmatch 的通配符,非正则)

# re —— 更精确可控(支持 \d、+、边界等)
print(bool(re.fullmatch(r"test_\d+\.py", name)))  # True(需转义点号,\d+ 表示一个及以上数字)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bol5261

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值