glob

即使glob API非常简单, 但这个模块包含了很多的功能. 在很多情况下, 尤其是你的程序需要寻找出文件系统中, 文件名匹配特定模式的文件时, 是非常有用的. 如果你需要包含一个特定扩展名, 或前缀, 或含有任何普通字符串的文件列表, 可以直接使用glob代替手工编程扫描目录内容.
glob中模式规则不是正则表达式, 而是, 符合标准Uinx路径扩展规则. 但是Shell变量名和符号(~)是不被扩充的, 只有一些特殊的字符: 两个不同的通配符和字母范围被支持. 模块规则适合于文件名的片段(以/为分隔), 但模式中的路径可以是相对或者绝对路径.

Example Data

假设当前工作目录下包含有以下一些文件.

# tree .
.
└── dir
├── file1.txt
├── file2.txt
├── filea.txt
├── fileb.txt
├── file?.txt
├── file.txt
├── file[.txt
├── file*.txt
└── subdir
└── subfile.txt 2 directories, 9 files

Wildcards

glob.glob(pathname, *, recursive=False):返回一个与pathname匹配的路径组成的list,该list可能为空。 该参数必须为包含路径说明的字符串。pathname 可以为绝对路径 (like /usr/src/Python-1.5/Makefile) 或相对路径 (like ../../Tools/*/*.gif), 并且可以包含shell风格的通配符。损坏的符号链接将被包含在结果中 (类似于shell中)。如果 recursive 设置为真,“**” 将匹配所有存在的目录和子目录和任何文件。如果匹配式以 os.sep 结尾, 只对目录和子目录进行匹配。

举例
*匹配名字片段中的0个或多个字符, 例如, dir/* .

import glob

for name in sorted(glob.glob('dir/*')):
print(name)

该模式在目录中匹配每个路径名(文件或目录),而不需要进一步递归到子目录中。glob()返回的数据没有排序,因此这里的示例对它进行排序,以便更容易地研究结果。

# python glob_study.py
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 glob

print('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.txt

在这种情况下,结果是一样的。如果有另一个子目录,通配符将匹配两个子目录,并包含两个子目录中的文件名。

Single Character Wildcard

其他的被支持的通配符是问号(?). 它匹配在对应位置的任一单个字符. 例如:

import glob

for name in sorted(glob.glob('dir/file?.txt')):
print(name)

匹配所有以”file”开头, 之后包含一个任何字符并以”.txt”结尾的文件.

dir/file*.txt
dir/file1.txt
dir/file2.txt
dir/file?.txt
dir/file[.txt
dir/filea.txt
dir/fileb.txt

Character Ranges

使用一个字符范围(a-z)而不是一个问号来匹配几个字符中的一个。此示例在扩展名之前查找名称中具有数字的所有文件。

import glob

for name in sorted(glob.glob('dir/*[0-9].*')):
print(name)

字符范围[0-9]匹配任何单一数字. 这个范围是基于每个字符/数字的字符编码顺序, 破折号(-)表示一个范围, 上面的范围也可直接用[0123456789]来表示.

dir/file1.txt
dir/file2.txt

Escaping Meta-characters

glob.escape(pathname):转义所有的特殊字符('?','*'和'['])。如果您想匹配任意可能包含特殊字符的字符串,这将非常有用。驱动器/ UNC共享点中的特殊字符不会转义,例如在Windows系统上 escape('//?/c:/Quo vadis?.txt') 将返回 '//?/c:/Quo vadis[?].txt'。

举例
有时需要搜索包含特殊元字符的名称的文件,这些名称包含了其模式的特殊元字符。escape()函数构建了一个适当的模式,其中特殊字符“escaped”,因此它们不会被glob扩展或解释为特殊字符。

import glob

specials = '?*['

for char in specials:
pattern = 'dir/*' + glob.escape(char) + '.txt'
print('Searching for: {!r}'.format(pattern))
for name in sorted(glob.glob(pattern)):
print(name)
print()

每个特殊字符通过构建包含单个条目的字符范围来转义。

Searching for:  'dir/*[?].txt'
dir/file?.txt Searching for: 'dir/*[*].txt'
dir/file*.txt Searching for: 'dir/*[[].txt'
dir/file[.txt

Python glob.md的更多相关文章

  1. python glob 用通配符查找指定目录中的文件 - 开源中国社区

    python glob 用通配符查找指定目录中的文件 - 开源中国社区 python glob 用通配符查找指定目录中的文件

  2. python glob标准库基础学习

    #glob文件名模式匹配#作用:使用unix shell规则查找与一个模式匹配文件名"""尽管glob api很小,但这个模块很强大,只要程序需要查找文件系统中名字与某种 ...

  3. python glob fnmatch 用于文件查找操作

    參考: http://python.jobbole.com/81552/:Python模块学习:glob文件路径查找 http://blog.csdn.net/suiyunonghen/article ...

  4. python glob的安装和使用

    基本概念 glob是python自己带的一个文件操作相关模块,用它可以查找符合自己目的的文件,类似于Windows下的文件搜索,支持通配符操作.*,?,[]这三个通配符,*代表0个或多个字符,?代表一 ...

  5. python 标准库 glob ,python glob 学习

    glob库是最简单的模块之一,内容非常少.用它可以查找符合特定规则的文件路径名.跟使用 windows 下的文件搜索差不多.查找文件只用到三个匹配符: ”*”, 匹配 个或多个字符: “?”, ”?” ...

  6. Python os.md

    os 便携式访问操作系统的特定功能.os模块提供了对特定平台模块(如posix, nt, mac)的封装, 函数提供的api在很多平台上都可以相同使用, 所以使用os模块会变得很方便. 但不是所有函数 ...

  7. Python shutil.md

    shutil shutil模块包括高级文件操作,例如复制和归档. Copying Files shutil.copyfileobj(fsrc, fdst[, length]):将类似文件的对象fsrc ...

  8. Python glob使用

    http://www.cnblogs.com/lovemo1314/archive/2011/04/26/2029556.html 说明: glob是python自己带的一个文件操作相关模块,用它可以 ...

  9. python glob

    http://python.jobbole.com/81552/ glob模块是最简单的模块之一,内容非常少.用它可以查找符合特定规则的文件路径名.跟使用windows下的文件搜索差不多.查找文件只用 ...

随机推荐

  1. 第17课-数据库开发及ado.net 聚合函数,模糊查询like,通配符.空值处理.order by排序.分组group by-having.类型转换-cast,Convert.union all; Select 列 into 新表;字符串函数;日期函数

    第17课-数据库开发及ado.net 聚合函数,模糊查询like,通配符.空值处理.order by排序.分组group by-having.类型转换-cast,Convert.union all;  ...

  2. sqlserver清除缓存(转载)

    sqlserver清除缓存,记录查询时间   1 2 3 4 5 6 7 8 9 10 11 12 --1. 将当前数据库的全部脏页写入磁盘.“脏页”是已输入缓存区高速缓存且已修改但尚未写入磁盘的数据 ...

  3. 【Linux】apt-get 源地址汇总

    修改etc/apt/sources.list文件 deb http://mirrors.163.com/ubuntu/ lucid main restricted universe multivers ...

  4. Java 支付宝支付,退款,单笔转账到支付宝账户(支付宝订单退款)

    上一篇写到支付宝的支付,这代码copy下来就能直接用了,   我写学习文档时会经常贴 官方参数文档的案例地址, 因为我觉得 请求参数,响应参数说明 官方文档整理的很好,毕竟官方不会误导大家. 我学一个 ...

  5. python 系列文章汇总(持续更新...)

    引言 不知不觉已经写了好几篇 python 相关的随笔了,从刚开始的门外汉到现在已经对 python 有一些入门了,时间也已经过去了一个多月. 写博客真是好处多多,不仅能提供整理自己学习的知识点,梳理 ...

  6. Calendar类的一些不易区分的属性

    1.Calendar.MONTH 月份从0-11,获取之后需要加1才能得到真正的月份 2.Calendar.DAY_OF_WEEK 本周的第几天,从星期天开始算 3.Calendar.WEEK_OF_ ...

  7. html基础标签下

    1.1 单标签 ◆注释标签   ctrl+/ ◆水平线标签   <hr> ◆换行标签   <br> 1.2 双标签 ◆段落标签    <p></p> ◆ ...

  8. 如何删除PeopleSoft Process Definition

    PeopleSoft没有在页面提供删除Process Definition的快捷方式. 可以通过AD创建一个新的project加入这个process definition,在upgrade tab选择 ...

  9. 自定义适用于手机和平板电脑的 Dynamics 365(一):主页

    当用户首次打开适用于手机和平板电脑的 Dynamics 365 时,他们将看到默认为“销售仪表板”的主页. 您可以创建新仪表板或 Web 应用程序中编辑现有仪表板,然后为移动设备启用它们,用户可以选择 ...

  10. SLAM产品化的一些思考

    这两年一直在做SLAM产品化的一些工作,有些感触,想和大家分享一下.很多想法只是个人浅见,不当之处还望大家指正. 我这两年分别做了AR眼镜和辅助驾驶方向的开发,说实话,挫折大于成果.SLAM产品化之难 ...