每周一个 Python 模块 | fnmatch

简介: fnmatch 模块主要用于文件名的比较,使用 Unix shell 使用的 glob 样式模式。

简单匹配


fnmatch() 将单个文件名与模式进行比较并返回布尔值,来看它们是否匹配。当操作系统使用区分大小写的文件系统时,比较区分大小写。


import fnmatch
import os
pattern = 'fnmatch_*.py'
print('Pattern :', pattern)
print()
files = os.listdir('.')
for name in sorted(files):
    print('Filename: {:<25} {}'.format(name, fnmatch.fnmatch(name, pattern)))
# output
# Pattern : fnmatch_*.py
# 
# Filename: fnmatch_filter.py         True
# Filename: fnmatch_fnmatch.py        True
# Filename: fnmatch_fnmatchcase.py    True
# Filename: fnmatch_translate.py      True
# Filename: index.rst                 False
复制代码


在此示例中,模式匹配所有以 'fnmatch_' 开头和以 '.py' 结尾的文件。

要强制进行区分大小写的比较,无论文件系统和操作系统设置如何,请使用 fnmatchcase()


import fnmatch
import os
pattern = 'FNMATCH_*.PY'
print('Pattern :', pattern)
print()
files = os.listdir('.')
for name in sorted(files):
    print('Filename: {:<25} {}'.format(name, fnmatch.fnmatchcase(name, pattern)))
# output
# Pattern : FNMATCH_*.PY
# 
# Filename: fnmatch_filter.py         False
# Filename: fnmatch_fnmatch.py        False
# Filename: fnmatch_fnmatchcase.py    False
# Filename: fnmatch_translate.py      False
# Filename: index.rst                 False
复制代码


由于用于测试此程序的 OS X 系统使用区分大小写的文件系统,因此没有文件与修改后的模式匹配。


过滤


要测试文件名序列,使用 filter(),它返回与 pattern 参数匹配的名称列表。


import fnmatch
import os
import pprint
pattern = 'fnmatch_*.py'
print('Pattern :', pattern)
files = list(sorted(os.listdir('.')))
print('\nFiles   :')
pprint.pprint(files)
print('\nMatches :')
pprint.pprint(fnmatch.filter(files, pattern))
# output
# Pattern : fnmatch_*.py
# 
# Files   :
# ['fnmatch_filter.py',
#  'fnmatch_fnmatch.py',
#  'fnmatch_fnmatchcase.py',
#  'fnmatch_translate.py',
#  'index.rst']
# 
# Matches :
# ['fnmatch_filter.py',
#  'fnmatch_fnmatch.py',
#  'fnmatch_fnmatchcase.py',
#  'fnmatch_translate.py']
复制代码


在此示例中,filter() 返回与此部分关联的示例源文件的名称列表。


翻译模式


在内部,fnmatchglob 模式转换为正则表达式,并使用 re 模块比较名称和模式。translate() 函数是将 glob 模式转换为正则表达式的公共 API。


import fnmatch
pattern = 'fnmatch_*.py'
print('Pattern :', pattern) # Pattern : fnmatch_*.py
print('Regex   :', fnmatch.translate(pattern))  # Regex   : (?s:fnmatch_.*\.py)\Z


目录
相关文章
|
4天前
|
JSON API 数据格式
30天拿下Python之requests模块
30天拿下Python之requests模块
17 7
|
4天前
|
人工智能 数据可视化 搜索推荐
Python异常模块与包
Python异常模块与包
|
4天前
|
开发者 Python
30天拿下Python之模块和包
30天拿下Python之模块和包
|
7天前
|
前端开发 Python
python之【Tkinter模块】
python之【Tkinter模块】
17 5
|
5天前
|
Python
Python中正则表达式(re模块)用法详解
Python中正则表达式(re模块)用法详解
13 2
|
3天前
|
Linux Python Windows
一个Python模块Pendulum的问题
一个Python模块Pendulum的问题
|
4天前
|
API Python
30天拿下Python之matplotlib模块
30天拿下Python之matplotlib模块
|
4天前
|
SQL 数据处理 数据库
30天拿下Python之pandas模块
30天拿下Python之pandas模块
|
4天前
|
存储 索引 Python
30天拿下Python之numpy模块
30天拿下Python之numpy模块
|
4天前
|
开发者 Python
30天拿下Python之logging模块
30天拿下Python之logging模块
下一篇
无影云桌面