码迷,mamicode.com
首页 > 编程语言 > 详细

Python3标准库:fnmatch UNIX式glob模式匹配

时间:2020-03-14 11:10:28      阅读:63      评论:0      收藏:0      [点我收藏+]

标签:cas   区分大小写   pattern   mat   lis   re模块   比较   程序   模式匹配   

1. fnmatch UNIX式glob模式匹配

fnmatch模块用于根据glob模式(如UNIX shell所用的模式)比较文件名。

1.1 简单匹配

fnmatch()将一个文件名与一个模式进行比较,并返回一个布尔值,指示二者是否匹配。如果操作系统使用一个区分大小写的文件系统,则这个比较就是区分大小写的。

import fnmatch
import os

pattern = ‘Demo*.py‘
print(‘Pattern :‘, pattern)
print()

files = os.listdir(‘.‘)
for name in sorted(files):
    print(‘Filename: {:<25} {}‘.format(
        name, fnmatch.fnmatch(name, pattern)))

在这个例子中,这个模式会匹配所有以‘Demo‘开头并以‘.py‘结尾的文件。

技术图片

要强制完成一个区分大小写的比较,而不论文件系统和操作系统如何设置,可以使用fnmatchcase()。 

import fnmatch
import os

pattern = ‘Demo*.PY‘
print(‘Pattern :‘, pattern)
print()

files = os.listdir(‘.‘)

for name in sorted(files):
    print(‘Filename: {:<25} {}‘.format(
        name, fnmatch.fnmatchcase(name, pattern)))

由于测试这个程序所用的win10系统使用的是区分大小写的文件系统,所以模式修改后不会匹配任何文件。

技术图片

1.2 过滤

要测试一个文件名序列,可以使用filter(),它会返回与模式参数匹配的文件名列表。

import fnmatch
import os
import pprint

pattern = ‘Demo*.py‘
print(‘Pattern :‘, pattern)

files = list(sorted(os.listdir(‘.‘)))

print(‘\nFiles   :‘)
pprint.pprint(files)

print(‘\nMatches :‘)
pprint.pprint(fnmatch.filter(files, pattern))

在这个例子中,filter()返回了与这一节关联的示例源文件的文件名列表。

技术图片

1.3 转换模式

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

import fnmatch

pattern = Demo*.py
print(Pattern :, pattern)
print(Regex   :, fnmatch.translate(pattern))

要建立一个合法的表达式,需要对一些字符进行转义。

技术图片

Python3标准库:fnmatch UNIX式glob模式匹配

标签:cas   区分大小写   pattern   mat   lis   re模块   比较   程序   模式匹配   

原文地址:https://www.cnblogs.com/liuhui0308/p/12462208.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!