Python3标准库:fnmatch UNIX式glob模式匹配
Posted 爱编程的小灰灰
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python3标准库:fnmatch UNIX式glob模式匹配相关的知识,希望对你有一定的参考价值。
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模式匹配的主要内容,如果未能解决你的问题,请参考以下文章