如何使用Python标准库glob模块精确查找特定规则的文件路径?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1410个文字,预计阅读时间需要6分钟。
前言+1、glob模块可以查找当前脚本目录(相对路径)或指定目录(绝对路径)下符合特定规则的文件路径,与Windows下的文件搜索功能类似。
2、查找文件仅用到三个匹配符:+2、查找文件只用到三个匹配符:
前言
1、glob模块可以查找当前脚本目录(相对路径)下或者某一指定目录(绝对路径)符合特定规则的文件路径名,跟使用windows下的文件搜索差不多。
2、查找文件只用到三个匹配符:*,?, []。
①*通配符:匹配0个或多个字符;②?单个字符通配符:匹配单个字符;
③[]字符范围:匹配指定范围内的字符,如:[0-9]匹配数字。
glob模块的用法
glob.glob
①返回所有匹配的文件路径列表。
②只有一个参数pathname:定义了文件路径匹配规则;可以是绝对路径,可以是相对路径。
代码示例:
import glob#获取指定目录下的所有图片
print (glob.glob(r"/home/qiaoyunhao/*/*.png"))#加上r让字符串'/'不产生转义
#获取上级目录的所有.py文件
print (glob.glob(r'../*.py')) #相对路径
运行结果:
glob.iglob
①获取一个可编历对象,使用它可以逐个获取匹配的文件路径名。
②与glob.glob()的区别:glob.glob()同时获取所有的匹配路径;而glob.iglob()一次只获取一个匹配路径。
代码示例:
import glob#父目录中的.py文件
f = glob.iglob(r'../*.py')
print (f) #<generator object iglob at 0x00B9FF80>
for py in f:
print (py)
运行结果:
查找路径
通配符
星号(*)匹配零个或多个字符
代码示例
import globfor name in glob.glob('dir/*'):
print (name)
运行结果:
dir/file.txtdir/file1.txt
dir/file2.txt
dir/filea.txt
dir/fileb.txt
dir/subdir
单个字符通配符
问号(?)匹配任何单个的字符。
代码示例:
import globfor name in glob.glob('dir/file?.txt'):
print (name)
运行结果:
dir/file1.txtdir/file2.txt
dir/filea.txt
dir/fileb.txt
字符范围
当需要匹配一个特定的字符,[]表示匹配指定范围内的字符。
代码示例:
import globfor name in glob.glob('dir/*[0-9].*'):
print (name)
运行结果:
dir/file1.txtdir/file2.txt
glob模式
前言
在计算机编程中,特别是类Unix环境,glob模式通过通配符来匹配文件名。
例如:Unix命令:在某一目录中将目录内所有以扩展名为.txt的文件从当前目录拷贝到textfiles目录。
mv *.txt textfiles/ # 这里是一个匹配任意数量字符基本通配符,*.txt就表示一个glob模式。另一个通用的通配符是,它表示任意一个字符。最常用的通配符是 *,?,[…]:
通配符
描述
例子
匹配
不匹配
*
匹配任意数量的字符包括空字符
Law*
Law,Laws, orLawyer
*Law*
Law,GrokLaw, orLawyer.
?
匹配任意一个字符
?at
Cat,cat,Batorbat
at
[abc]
匹配任意一个包含的字符
[CB]at
CatorBat
catorbat
[a-z]
匹配任意一个给定范围的字符
Letter[0-9]
Letter0,Letter1etc.
LettersorLetter
在所有以上例子中,路径分隔符(unix的/,windows的\)都不会被匹配。
在Linux和POSIX系统中[…]有以下两个扩展:
通配符
描述
例子
匹配
不匹配
[!abc]
不匹配任意一个包含的字符
[!C]at
Bat,bat, orcat
Cat
[!a-z]
不匹配任意一个给定范围的字符
Letter[!3-5]
Letter1,Letter2etc.
Letter3,Letter4orLetter5
与正则的比较:
Glob的通配符
等价正则的表达式
?
.
*
.*
glob尝试匹配整个字符串(例如,S*.DOC将匹配S.DOC和SA.DOC,但不匹配POST.DOC或SURREY.DOCKS);正则只匹配子串除非使用^和$。所以S*.DOC的等价正则是^S.*\.DOC$。
node glob对常用通配符又做了一些扩展:
通配符
描述
例子
匹配
不匹配
**
匹配任意数量的字符包括空字符(包括路径分隔符)
**/*.js
/a/b/c.js
!(pattern|pattern)
匹配除了()内以外的pattern
!(abc|bcd)
aaa,bbb
abc.bcd
?(pattern|pattern)
匹配至多一个()内的pattern
?(abc|bcd)
abc
bbb
+(pattern|pattern)
匹配至少一个()内的pattern
+(abc|bcd)
abc
bbb
*(pattern|pattern)
匹配任意个()内的pattern
*(abc|bcd)
abc
bbb
@(pattern|pattern)
精确匹配()内的其中一个pattern
@(abc|bcd)
abc
abd
去期待陌生,去拥抱惊喜。
本文共计1410个文字,预计阅读时间需要6分钟。
前言+1、glob模块可以查找当前脚本目录(相对路径)或指定目录(绝对路径)下符合特定规则的文件路径,与Windows下的文件搜索功能类似。
2、查找文件仅用到三个匹配符:+2、查找文件只用到三个匹配符:
前言
1、glob模块可以查找当前脚本目录(相对路径)下或者某一指定目录(绝对路径)符合特定规则的文件路径名,跟使用windows下的文件搜索差不多。
2、查找文件只用到三个匹配符:*,?, []。
①*通配符:匹配0个或多个字符;②?单个字符通配符:匹配单个字符;
③[]字符范围:匹配指定范围内的字符,如:[0-9]匹配数字。
glob模块的用法
glob.glob
①返回所有匹配的文件路径列表。
②只有一个参数pathname:定义了文件路径匹配规则;可以是绝对路径,可以是相对路径。
代码示例:
import glob#获取指定目录下的所有图片
print (glob.glob(r"/home/qiaoyunhao/*/*.png"))#加上r让字符串'/'不产生转义
#获取上级目录的所有.py文件
print (glob.glob(r'../*.py')) #相对路径
运行结果:
glob.iglob
①获取一个可编历对象,使用它可以逐个获取匹配的文件路径名。
②与glob.glob()的区别:glob.glob()同时获取所有的匹配路径;而glob.iglob()一次只获取一个匹配路径。
代码示例:
import glob#父目录中的.py文件
f = glob.iglob(r'../*.py')
print (f) #<generator object iglob at 0x00B9FF80>
for py in f:
print (py)
运行结果:
查找路径
通配符
星号(*)匹配零个或多个字符
代码示例
import globfor name in glob.glob('dir/*'):
print (name)
运行结果:
dir/file.txtdir/file1.txt
dir/file2.txt
dir/filea.txt
dir/fileb.txt
dir/subdir
单个字符通配符
问号(?)匹配任何单个的字符。
代码示例:
import globfor name in glob.glob('dir/file?.txt'):
print (name)
运行结果:
dir/file1.txtdir/file2.txt
dir/filea.txt
dir/fileb.txt
字符范围
当需要匹配一个特定的字符,[]表示匹配指定范围内的字符。
代码示例:
import globfor name in glob.glob('dir/*[0-9].*'):
print (name)
运行结果:
dir/file1.txtdir/file2.txt
glob模式
前言
在计算机编程中,特别是类Unix环境,glob模式通过通配符来匹配文件名。
例如:Unix命令:在某一目录中将目录内所有以扩展名为.txt的文件从当前目录拷贝到textfiles目录。
mv *.txt textfiles/ # 这里是一个匹配任意数量字符基本通配符,*.txt就表示一个glob模式。另一个通用的通配符是,它表示任意一个字符。最常用的通配符是 *,?,[…]:
通配符
描述
例子
匹配
不匹配
*
匹配任意数量的字符包括空字符
Law*
Law,Laws, orLawyer
*Law*
Law,GrokLaw, orLawyer.
?
匹配任意一个字符
?at
Cat,cat,Batorbat
at
[abc]
匹配任意一个包含的字符
[CB]at
CatorBat
catorbat
[a-z]
匹配任意一个给定范围的字符
Letter[0-9]
Letter0,Letter1etc.
LettersorLetter
在所有以上例子中,路径分隔符(unix的/,windows的\)都不会被匹配。
在Linux和POSIX系统中[…]有以下两个扩展:
通配符
描述
例子
匹配
不匹配
[!abc]
不匹配任意一个包含的字符
[!C]at
Bat,bat, orcat
Cat
[!a-z]
不匹配任意一个给定范围的字符
Letter[!3-5]
Letter1,Letter2etc.
Letter3,Letter4orLetter5
与正则的比较:
Glob的通配符
等价正则的表达式
?
.
*
.*
glob尝试匹配整个字符串(例如,S*.DOC将匹配S.DOC和SA.DOC,但不匹配POST.DOC或SURREY.DOCKS);正则只匹配子串除非使用^和$。所以S*.DOC的等价正则是^S.*\.DOC$。
node glob对常用通配符又做了一些扩展:
通配符
描述
例子
匹配
不匹配
**
匹配任意数量的字符包括空字符(包括路径分隔符)
**/*.js
/a/b/c.js
!(pattern|pattern)
匹配除了()内以外的pattern
!(abc|bcd)
aaa,bbb
abc.bcd
?(pattern|pattern)
匹配至多一个()内的pattern
?(abc|bcd)
abc
bbb
+(pattern|pattern)
匹配至少一个()内的pattern
+(abc|bcd)
abc
bbb
*(pattern|pattern)
匹配任意个()内的pattern
*(abc|bcd)
abc
bbb
@(pattern|pattern)
精确匹配()内的其中一个pattern
@(abc|bcd)
abc
abd
去期待陌生,去拥抱惊喜。

