python标准库之glob模块:查找符合特定规则的文件路径名

网友投稿 509 2022-08-28


python标准库之glob模块:查找符合特定规则的文件路径名

前言

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) #for py in f: print (py)

运行结果:

查找路径

通配符

星号(*)匹配零个或多个字符

代码示例

import globfor name in glob.glob('dir/*'): print (name)

运行结果:

dir/file.txtdir/file1.txtdir/file2.txtdir/filea.txtdir/fileb.txtdir/subdir

单个字符通配符

问号(?)匹配任何单个的字符。

代码示例:

import globfor name in glob.glob('dir/file?.txt'): print (name)

运行结果:

dir/file1.txtdir/file2.txtdir/filea.txtdir/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, or Lawyer

 

*Law*

Law, GrokLaw, or Lawyer.

 

?

匹配任意一个字符

?at

Cat, cat, Bat or bat

at

[abc]

匹配任意一个包含的字符

[CB]at

Cat or Bat

cat or bat

[a-z]

匹配任意一个给定范围的字符

Letter[0-9]

Letter0, Letter1 etc.

Letters or Letter

【注意】在所有以上例子中,路径分隔符(unix的/,windows的\)都不会被匹配。

在Linux和POSIX系统中[…]有以下两个扩展:

通配符

描述

例子

匹配

不匹配

[!abc]

不匹配任意一个包含的字符

[!C]at

Bat, bat, or cat

Cat

[!a-z]

不匹配任意一个给定范围的字符

Letter[!3-5]

Letter1, Letter2 etc.

Letter3, Letter4 or Letter5

与正则的比较:

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

去期待陌生,去拥抱惊喜。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:java实现马踏棋盘的完整版
下一篇:python之第三方HTTP库requests之文件上传
相关文章

 发表评论

暂时没有评论,来抢沙发吧~