python3从零学习-5.4.8、fnmatch — Unix

2020-05-23  本文已影响0人  山海皆可平z

源代码: Lib/fnmatch.py

        此模块提供了 Unix shell 风格的通配符,它们 并不 等同于正则表达式(关于后者的文档参见 re   模块)。 shell 风格通配符所使用的特殊字符如下:

对于字面值匹配,请将原字符用方括号括起来。 例如,'[?]' 将匹配字符 '?'。

        注意文件名分隔符 (Unix 上为 '/') 不是 此模块所特有的。 请参见 glob 模块了解文件名扩展 (glob 使用 filter() 来匹配文件名的各个部分)。 类似地,以一个句点打头的文件名也不是此模块所特有的,可以通过 * 和 ? 模式来匹配。

fnmatch.fnmatch(filename, pattern)

        检测 filename 字符串是否匹配 pattern 字符串,返回 True    或 False.

        两个形参都会使用 os.path.normcase()               进行大小写正规化。 fnmatchcase()            可被用于执行大小写敏感的比较,无论这是否为所在操作系统的标准。

        这个例子将打印当前目录下带有扩展名 .txt 的所有文件名:

import fnmatch

import os

forfileinos.listdir('.'):

   iffnmatch.fnmatch(file,'*.txt'):

       print(file)

fnmatch.fnmatchcase(filename, pattern)

检测 filename 是否匹配 pattern,返回 True 或 False;此比较是大小写敏感的,并且不会应用 os.path.normcase()。

fnmatch.filter(names, pattern)

        返回 names 列表中匹配 pattern 的子集。 它等价于 [n for n in names if fnmatch(n, pattern)],但其实现更为高效。

fnmatch.translate(pattern)

        返回 shell 风格 pattern 转换成的正则表达式以便用于 re.match() 。

示例:

>>>importfnmatch,re

>>>

>>>regex=fnmatch.translate('*.txt')

>>>regex

'(?s:.*\\.txt)\\Z'

>>>reobj=re.compile(regex)

>>>reobj.match('foobar.txt')

<_sre.SRE_Match object; span=(0, 10), match='foobar.txt'>

上一篇 下一篇

猜你喜欢

热点阅读