当前位置: 首页 > news >正文

`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 通配符模式转换为等价的正则表达式(供高级使用)。

示例:

importfnmatchimportos 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结尾的文件):

importfnmatch,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+ 表示一个及以上数字)

http://www.cnnetsun.cn/news/4159866.html

相关文章:

  • 主题公园移动供电案例:从环球影城场景,看户外频繁插拔工况下工业连接器选型思路
  • 读懂eas.json:expo-react-native-cicd中dev、prod-apk、prod-aab三大构建Profile配置详解
  • PyULog:8条命令解析PX4 ULog日志,导出CSV、KML与SQLite
  • RDMA数据传输操作:Send/Recv与Read/Write全解析
  • AnythingLLM 教程:10 分钟搭建一个本地私有知识库问答应用
  • Element Tiptap富文本编辑器:Vue3项目5分钟接入带菜单的WYSIWYG编辑器
  • SPA 刷新 404 难题终结者:boot-react SinglePageAppConfig pushState 资源解析器深度剖析
  • 我的价值观
  • 如何使用 draw.io 桌面版:离线绘图与批量导出完整指南
  • CEdev 图形编程完全指南:graphx 库调色板、精灵动画与 Tilemap 实战教程
  • iOS跨平台位置模拟实战:基于WebKit调试协议实现GeoPort方案
  • Weasis:内建 2D/3D 影像分析的开源 DICOM 查看器
  • res-downloader完全教程:免费的跨平台资源嗅探器,一键下载视频音乐图片
  • PhoneProfilesPlus新手必学的8个实用场景:会议自动静音、通勤一键飞行模式
  • 让Claude Code、Codex与Gemini协同工作:Agent Relay Harnesses完整指南
  • 训练UniDetector前必看的20+个关键超参数:完整配置项逐条解读
  • 快速上手solid-dnd:10分钟从零搭建你的第一个拖拽应用,新手友好教程
  • 如何系统掌握高级数据结构?AlgorithmsAndDataStructuresInAction官方代码库入门指南
  • Vue-preview 图片预览:新手安装与上手完整指南
  • ShawzinBot:免费把 MIDI 变成游戏按键
  • 如何重置 Navicat 试用期:3 条命令跑通 navicat-key 注册表清理工具
  • ODC 生产环境部署最佳实践:MetaDB、Docker 与高可用架构配置全解析
  • 让联邦查询提速10倍:aws-athena-query-federation谓词下推、分区裁剪与TopN优化实战
  • MobilityDB高精度建模:tpose四元数姿态类型如何描述自动驾驶与机器人运动
  • TeslaLogger新功能MCP Server详解:用自然语言向AI查询你的特斯拉数据
  • B站视频下载完全指南:5 分钟跑通 BilibiliDown,把喜欢的内容存进本地
  • Rollbar.js Node.js 接入实战:Express 服务端错误追踪的 5 步配置法
  • paperetl PubMed 高级过滤教程:用 MeSH 编码与关键词精准筛选科研文献
  • 读懂 Apktool ApkInfo:APK 元数据的存储、加载与回写
  • MusicPlayer2:免费开源的本地音乐播放器,10分钟讲透歌词、封面与音效