继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Python实用技法第22篇:利用Shell通配符做字符串匹配

python学长
关注TA
已关注
手记 114
粉丝 21
获赞 47

1、需求🙀

当工作在UNIX Shell下时,我们想使用常见的通配符模式(即:.py,Dat[0-9].csv等)来对文本做匹配。

2、解决方案😸

fnmatch模块提供了两个函数:fnmatch()和fnmatchcase(),可用来执行这样的匹配,使用起来非常简单。

实例:

from fnmatch import fnmatch,fnmatchcase
print(fnmatch('mark.txt','*.txt'))
print(fnmatch('mark.txt','?ark.txt'))
print(fnmatch('mark2018.txt','?ark201[0-9].txt'))
Python资源分享qun 784758214 ,内有安装包,PDF,学习视频,这里是Python学习者的聚集地,零基础,进阶,都欢迎

运行结果:

True
True
True

一般来说,fnmatch()的大小写匹配规则与底层文件相同,例如:

print(fnmatch('mark.txt','*.TXT'))

上面代码,在Max下运行为False,在Windows下运行为True。

如果这个大小写区别对我们很重要,我们就应该使用fnmatchcase()。它会完全根据我们提供的大小写方法来做匹配。

实例:

from fnmatch import fnmatch,fnmatchcase
print(fnmatchcase('mark.txt','*.TXT'))

结果:

False

关于这些函数,一个常被忽略的特性是它们在处理非文件名式的字符串时的潜在用途。

例如,

from fnmatch import fnmatchcase

#假设有一组街道地址,就像这样:
address=[
    '111 A 上海 SH',
    '112 B 上海 SH',
    '113 C 上海 SH',
    '124 D 北京 BJ',
    '138 E 北京 BJ',
    '145 F 北京 BJ',
]

result=[addr for addr in address if fnmatchcase(addr,'1[1-3][1-5]*BJ')]
print(result)

运行结果:

['124 D 北京 BJ']
Python资源分享qun 784758214 ,内有安装包,PDF,学习视频,这里是Python学习者的聚集地,零基础,进阶,都欢迎

3、分析😈

fnmatch完成的匹配操作有点介于简单的字符串方法和全功能的正则表达式之间。

如果实际上是想编写匹配文件名的代码,那应该使用glob模块来完成,后面会介绍到的。

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP