包装材料网站建设,建筑公司注册要求,免费seo优化,企业展示建设网站匹配文件名称模块glob
1.概述
glob模式规则与re模块的正则表达式规则不大相同#xff0c;glob模块遵循标准的UNIX路径扩展规则。 fnmatch模块用于根据glob模式比较文件名
2.glob表达式匹配文件名
2.1.测试文件
介绍glob配置规则前#xff0c;先使用下面的代码创建测试文…匹配文件名称模块glob
1.概述
glob模式规则与re模块的正则表达式规则不大相同glob模块遵循标准的UNIX路径扩展规则。 fnmatch模块用于根据glob模式比较文件名
2.glob表达式匹配文件名
2.1.测试文件
介绍glob配置规则前先使用下面的代码创建测试文件。
from pathlib import Pathp Path(dir/subdir)
Path(p).mkdir(parentsTrue, exist_okTrue)pl [dir/file.txt, dir/file1.txt, dir/file2.txt, dir/filea.txt, dir/fileb.txt, dir/file?.txt,dir/file*.txt, dir/file[.txt, dir/subdir/subfile.txt]
for i in pl:myfile Path(i)myfile.touch(exist_okTrue)2.2.通配符
1.星号通配符
星号匹配一个文件名中0个或多个字符这个模式会匹配dir目录中所有的文件但不会递归到子目录查找。
import glob
for name in sorted(glob.glob(dir/*)):print(name)运行结果
dir/file*.txt
dir/file.txt
dir/file1.txt
dir/file2.txt
dir/file?.txt
dir/file[.txt
dir/filea.txt
dir/fileb.txt
dir/subdir下面是在匹配过程中假如了排序和子目录查找。
import globprint(Named explicitly:)
for name in sorted(glob.glob(dir/subdir/*)):print( {}.format(name))print(Named with wildcard:)
for name in sorted(glob.glob(dir/*/*)):print( {}.format(name))运行结果
Named explicitly:dir/subdir/subfile.txt
Named with wildcard:dir/subdir/subfile.txt2.问号通配符
问号匹配文件名中单个字符
import globfor name in sorted(glob.glob(dir/file?.txt)):print(name)运行结果
dir/file*.txt
dir/file1.txt
dir/file2.txt
dir/file?.txt
dir/file[.txt
dir/filea.txt
dir/fileb.txt2.3.字符区间
使用字符区间可以匹配字符区间中任意一个字符。例如 [a-z] 会匹配a到z范围的一个字符。
import glob
for name in sorted(glob.glob(dir/*[0-9].*)):print(name)运行结果
dir/file1.txt
dir/file2.txt2.4.转义元字符escape
有时候搜索的文件名包含一些特殊符号这些符号不希望被转义。glob提供了escape函数使这些特殊符号不被glob解释为特殊字符。
specials ?*[for char in specials:pattern dir/* glob.escape(char) .txtprint(Searching for: {!r}.format(pattern))for name in sorted(glob.glob(pattern)):print(name)print()运行代码下面中括号的字符都是原样输出没有被转义。
Searching for: dir/*[?].txt
dir/file?.txtSearching for: dir/*[*].txt
dir/file*.txtSearching for: dir/*[[].txt
dir/file[.txt3.fnmatch比较文件名
3.1.简单匹配fnmatch
使用一个模式来匹配一个文件返回布尔值。如果操作系统使用一个区分大小写的文件系统则这个比较就区分大小写。
import fnmatch
import ospattern my_*.py
print(Pattern :, pattern)
print()files os.listdir(.)
for name in sorted(files):print(Filename: {:25} {}.format(name, fnmatch.fnmatch(name, pattern)))运行代码他会匹配my_开头py结尾的文件。
Pattern : my_*.pyFilename: __init__.py False
Filename: dir False
Filename: my_test.py True
Filename: myfile.txt False
3.2.区分大小写匹配fnmatchcase
要强制完成一个区分大小写的比较不论文件系统和操作系统如何设置可以使用fnmatchcase()
import fnmatch
import ospattern FNMATCH_*.PY
print(Pattern :, pattern)
print()files os.listdir(.)for name in sorted(files):print(Filename: {:25} {}.format(name, fnmatch.fnmatchcase(name, pattern)))运行上面的代码他能够强制区分大小写匹配。
Pattern : FNMATCH_*.PYFilename: __init__.py False
Filename: dir False
Filename: my_test.py False
Filename: myfile.txt False
3.3.过滤filter
filter会返回与模式匹配的文件名列表
import fnmatch
import os
import pprintpattern my_*.py
print(Pattern :, pattern)files list(sorted(os.listdir(.)))print(\nFiles :)
pprint.pprint(files)print(\nMatches :)
pprint.pprint(fnmatch.filter(files, pattern))运行上面的代码过滤出my_开头py结尾的文件。
Pattern : my_*.pyFiles :
[__init__.py, dir, my_test.py, myfile.txt]Matches :
[my_test.py]3.4.转换模式
fnmatch将glob模式转换为一个正则表达式并使用re模块比较文件名和模式。translate()函数是将glob模式装换为正则表达式的公共API。
import fnmatchpattern fnmatch_*.py
print(Pattern :, pattern)
print(Regex :, fnmatch.translate(pattern))运行结果
Pattern : fnmatch_*.py
Regex : (?s:fnmatch_.*\.py)\Z