前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python3从零学习-5.4.8、fnmatch — Unix文件名模式匹配

python3从零学习-5.4.8、fnmatch — Unix文件名模式匹配

作者头像
用户7886150
修改2020-12-24 10:22:11
7520
修改2020-12-24 10:22:11
举报
文章被收录于专栏:bit哲学院bit哲学院

参考链接: fnmatch – Python中的Unix文件名模式匹配

源代码: Lib/fnmatch.py

        此模块提供了 Unix shell 风格的通配符,它们 

 并不

  等同于正则表达式(关于后者的文档参见 re

    模块)。 shell 风格通配符所使用的特殊字符如下:

     模式

     含义

     *

     匹配所有

     ?

     匹配任何单个字符

     [seq]

     匹配 

     seq

      中的任何字符

     [!seq]

     匹配任何不在 

     seq

      中的字符

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

 '[?]'

  将匹配字符 

 '?'

 。

         注意文件名分隔符 (Unix 上为 

 '/'

 ) 

 不是

  此模块所特有的。 请参见 glob

  模块了解文件名扩展 (glob

  使用 filter()

  来匹配文件名的各个部分)。 类似地,以一个句点打头的文件名也不是此模块所特有的,可以通过 

 *

  和 

 ?

  模式来匹配。

   fnmatch.fnmatch(filename, pattern) 

        检测 

 filename

  字符串是否匹配 

 pattern

  字符串,返回 True

     或 False.

 两个形参都会使用 os.path.normcase()

                进行大小写正规化。 fnmatchcase()

             可被用于执行大小写敏感的比较,无论这是否为所在操作系统的标准。

 这个例子将打印当前目录下带有扩展名 

 .txt

  的所有文件名:

   import fnmatch

import os

for file in os.listdir('.'):

    if fnmatch.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() 

 。 

 示例:

>>> import fnmatch, 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'>

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档