社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python的小技巧(一)glob标准库进行通配符匹配指定格式的文件

Robin唔系肉饼 • 4 年前 • 454 次点击  

简介

  • glob模块功能描述:glob模块可以使用Unix shell风格的通配符匹配符合特定格式的文件和文件夹
  • glob模块并非调用一个子shell实现搜索功能,而是在内部调用了os.listdir()和fnmatch.fnmatch()。
  • glob模块共包含以下3个函数:glob,isglob和escape
  • 查找文件只用到三个匹配符:” ”, “?”, “[]”。” ”匹配0个或多个字符;”?”匹配单个字符;”[]”匹配指定范围内的字符,如:[0-9]匹配数字。

glob函数

glob(pathname, recursive=False)
  • 第一个参数为需要匹配的字符串.(尽量在字符串前加r)
  • 第二个参数代表递归调用,与特殊通配符“**”一同使用,默认为False。
  • 路径格式可以是绝对路径 ,也可以是相对路径
  • 在3.5版本之后,glob函数支持一个特殊的通配符“**”,该通配符可以匹配指定路径里所有文件和目录,包括子目录里的所有文件和目录。使用这个通配符必须加上recursive=True参数。
  • glob默认不匹配以点符号(.)开始的文件,假如当前文件夹包含demo.txt和.demo.txt两个文件。
>>> import glob

>>> glob.glob('*.txt')

['demo.txt']

>>> glob.glob('.*.txt')

['.demo.txt']

print glob.glob(r'E:\*\*.xls')  

print glob.glob(r'.\*.py') 
  • 如果有匹配,glob.glob(path)的结果放入一个列表中返回
  • 如果没有匹配的,glob.glob(path)将返回一个空的list:[]
  • glob支持的通配符


在有复杂目录结构的情况下使用该通配符可能会导致性能下降,拖累整个程序的运行,需谨慎使用!

例子:

>>> import glob
>>> glob.glob('./[0-9].*')

['./1.gif', './2.txt']
>>> glob.glob('*.gif')

['1.gif', 'card.gif']
>>> glob.glob('?.gif')

['1.gif']
>>> glob.glob('**/*.txt', recursive=True)

['2.txt', 'sub/3.txt']
>>> glob.glob('./**/', recursive=True)

['./', './sub/']

iglob函数

iglob(pathname, recursive=False)

参数与glob()一致。 看名字就知道 i 代表的是iterator, 返回一个迭代器,遍历该迭代器的结果和glob()的返回结果一致。

escape函数

escape(pathname)

转义所有的特殊字符('?','*'和'['])。如果您想匹配任意可能包含特殊字符的字符串,这将非常有用。

参考文章

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/53083
 
454 次点击