iT邦幫忙

2023 iThome 鐵人賽

DAY 21
0
Software Development

跟著 OXXO 一起學 Python系列 第 45

( Day 21.2 ) Python 查找匹配檔案 glob

  • 分享至 

  • xImage
  •  

Python 的標準函式「glob」可以使用名稱與路徑的方式,查找出匹配條件的檔案或資料夾,查找出檔案後,搭配其他函式庫 ( 例如 os 標準函式庫 ) ,就能做到像是批次重新命名、批次刪除...等的動作。

原文參考:查找匹配檔案 glob

本篇使用的 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>

更多教學

大家好,我是 OXXO,是個即將邁入中年的斜槓青年,我有個超過一千篇教學的 STEAM 教育學習網,有興趣可以參考下方連結呦~ ^_^


上一篇
( Day 21.1 ) Python 檔案操作 os
下一篇
( Day 22.1 ) Python 高階檔案操作 shutil
系列文
跟著 OXXO 一起學 Python101
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言