>>> from env_helper import info; info()
页面更新时间: 2023-06-30 19:18:46
运行环境:
    Linux发行版本: Debian GNU/Linux 12 (bookworm)
    操作系统内核: Linux-6.1.0-9-amd64-x86_64-with-glibc2.36
    Python版本: 3.11.2

3.4. glob 模块

简介Glob 是一种文件匹配模式,全称 global,它起源于 Unix 的 bash shell 中, 比如在 linux 中常用的 mv *.txt tmp/ 中,*.txt 就使用到了这种模式。 在计算机编程中,经常需要对文件或者文件夹进行操作,那么会经常涉及到一些文件或者文件夹的匹配操作, 此时就是 Glob 模式大显身手的时候,比如上面的 mv 命令。 大家最熟悉的应用场景就是 git 中的 .gitignore 中的表达式了,它就是 Glob 模式的一个典型用法。

Glob 表达式工具

Smart-tools开发了一款Glob表达式在线验证工具,可以轻松验证Glob语句是否正确。

在 Python 中内置了 glob 模块,可以实现对文件与文件夹名称的获取。但是由于它是基于字符串方式实现的, 所以更推荐 pathlib 模块。

3.4.1. glob 函数

>>> from glob import glob
>>> wfiles = glob('*', recursive=True)
>>> print(wfiles)
['xx_new2.zip', 'sec05_practice1.ipynb', 'sec02_pathlib.ipynb', 'sec01_shutil.ipynb', 'sec02_walktree.ipynb', 'sec07_libarchive.ipynb', 'sec03_zipfile.ipynb', 'new.zip', 'new', 'sec06_practice2.ipynb', 'xx_out', 'xx_news.zip', 'xx_new.zip', 'sec04_renam.ipynb', 'chapter.ipynb', 'sec02-glob.ipynb']

要注意匹配模式中 ** 的使用。即使不指定嵌套模式,但是根据匹配机制,会匹配到子文件夹。

>>> from glob import glob
>>> wfiles = glob('**', recursive=True)
>>> print(wfiles)
['xx_new2.zip', 'sec05_practice1.ipynb', 'sec02_pathlib.ipynb', 'sec01_shutil.ipynb', 'sec02_walktree.ipynb', 'sec07_libarchive.ipynb', 'sec03_zipfile.ipynb', 'new.zip', 'new', 'new/hello1.txt', 'new/hello2.txt', 'new/foo', 'new/foo/foo.txt', 'sec06_practice2.ipynb', 'xx_out', 'xx_out/new', 'xx_out/new/hello1.txt', 'xx_out/new/hello2.txt', 'xx_news.zip', 'xx_new.zip', 'sec04_renam.ipynb', 'chapter.ipynb', 'sec02-glob.ipynb']

3.4.2. iglob 函数

>>> from glob import iglob
>>> entities = iglob('*.txt')
>>> for entity in entities:
>>>     print(entity)