查找匹配文件 glob
Python 的标准函数“glob”可以使用名称与路径的方式,查找出匹配条件的文件或文件夹,查找出文件后,搭配其他函数库 ( 例如 os 标准函数库 ) ,就能做到像是批次重新命名、批次删除...等的动作。
本篇使用的 Python 版本为 3.7.12,所有范例可使用 Google Colab 实作,不用安装任何软件 ( 参考:使用 Google Colab )
glob 的方法
下方列出 glob 模组常用的两个方法 ( 参考 Python 官方文件:glob ):
| 方法 | 参数 | 说明 |
|---|---|---|
| glob() | pathname | 以串列方式,回传所有匹配的文件或文件夹名称。 |
| iglob() | pathname | 以 generator 方式,回传所有匹配的文件或文件夹名称。 |
import glob
要使用 glob 必须先 import glob 模组,或使用 from 的方式,单独 import 特定的类型。
import glob
from glob import glob
glob(pathname)
glob(pathname) 执行后会根据 pathname 查找符合的文件或文件夹,下方的例子执行后,会以“相对路径”的方式寻找同一层的 test 文件夹里所有的文件 ( pathname 也可以使用“绝对路径”进行查找 )。
import glob
a = glob.glob(r'./test/*')
print(a)
pathname 支援下方万用字元 ( 通配符 ) 的写法:
| 字元 | 说明 | 范例 |
|---|---|---|
| * | 匹配任意数量字元。 | “wh*”会找到 what、white 和 why,但找不到 awhile 或 watch。 |
| ? | 匹配单一字元。 | “b?ll”会找到 ball、bell 和 bill。 |
| [] | 匹配方括号中的字元。 | “b[ae]ll”会找到 ball 和 bell,但找不到 bill。 |
| - | 匹配一个范围内的字元。 | “b[a-c]d”将找到 bad、bbd 和 bcd。 |
import glob
print(glob.glob(r'./test/*')) # 找出所有檔案
print(glob.glob(r'./test/*.txt')) # 找出所有副檔名為 .txt 的檔案,例如 1.txt、hello.txt
print(glob.glob(r'./test/[0-9].txt')) # 找出所以名稱為一個數字,副檔名為 .txt 的檔案,例如 1.txt、2.txt
print(glob.glob(r'./test/????.*')) # 找出所有檔名有四個字元的檔案,例如 test.txt、demo.py
print(glob.glob(r'./test/t*.*')) # 找出所有 t 開頭的檔案,例如 test.txt、test.py
print(glob.glob(r'./test/*e*.*')) # 找出所有檔名裡有 e 的檔案,例如 test.txt、hello.py
glob 也可额外设定 recursive=True 参数 ( 默认 False ),设定后可使用“**”的方式,搜索文件夹内所有文件夹的内容,例如下方的程序执行后,会搜索所有文件夹里,档名有四个字元的所有文件。
import glob
a = glob.glob('./**/????.*', recursive=True)
print(a) # ['./test.png', './main.py', './test/test.py']
iglob(pathname)
iglob(pathname) 的使用方式和 glob() 相同,差别在于得到的结果为 generator,必须使用 next() 之类的方式才能取用 ( 参考:产生器 generator )。
import glob
a = glob.glob('./**/????.*', recursive=True)
b = glob.iglob('./**/????.*', recursive=True)
print(a) # ['./test.png', './main.py', './test/test.py']
print(b) # <generator object _iglob at 0x1085449d0>
微信扫码关注
抖音扫码关注