fnmatch-Unix文件名模式匹配(8)Python文件和目录访问模块(必读进阶Python教程)(参考资料)
该模块提供用于Unix shell风格的通配符,这是支持不一样的正则表达式(这是中记录re
模块)。shell样式通配符中使用的特殊字符是:
图案 | 含义 |
---|---|
* |
匹配一切 |
? |
匹配任何单个字符 |
[seq] |
匹配seq中的任何字符 |
[!seq] |
匹配任何不在seq中的字符 |
对于文字匹配,将元字符包装在括号中。例如,'[?]'
匹配角色'?'
。
请注意,文件名分隔符('/'
在Unix上)对于此模块并不特殊。请参阅模块glob
以了解路径名扩展(glob
用于filter()
匹配路径名段)。同样,以句点开头的文件名对于此模块并不特殊,并且与*
和?
模式匹配。
fnmatch.
fnmatch
(文件名,模式)- 测试文件名字符串是否与模式字符串匹配,返回
True
或False
。使用两个参数进行大小写归一化os.path.normcase()
。fnmatchcase()
可以用来执行区分大小写的比较,无论这是否是操作系统的标准。此示例将使用扩展名打印当前目录中的所有文件名
.txt
:import fnmatch import os for file in os.listdir('.'): if fnmatch.fnmatch(file, '*.txt'): print(file)
fnmatch.
filter
(名称,模式)- 返回与pattern匹配的名称列表的子集。它与之相同 ,但实施效率更高。
[n for n in names if fnmatch(n,pattern)]
fnmatch.
translate
(模式)- 返回转换为正则表达式的shell样式模式以使用with
re.match()
。例:
>>> import fnmatch, re >>> >>> regex = fnmatch.translate('*.txt') >>> regex '(?s:.*\\.txt)\\Z' >>> reobj = re.compile(regex) >>> reobj.match('foobar.txt') <re.Match object; span=(0, 10), match='foobar.txt'>
也可以看看
- 模
glob
- Unix shell风格的路径扩展。