Last Updated on 2021-05-11 by Clay
glob 是一個 Python 內建的模組,可以透過像是在 UNIX-like 的 shell 一樣的規則來匹配檔案。目前測試,在 Windows 上也有效,對於習慣使用像是 Linux Terminal 來尋找檔案的人來說想必相當熟悉、好用。
以下便來筆記一些粗淺的使用方法,若日後有更深入的應用,我想也都會整理在這一篇當中。
你也可以從這裡參考官方對於 glob 模組的教學:https://docs.python.org/3/library/glob.html
glob 使用方法
我創建了一個名為 test_folder 的資料夾,底下放置著以數字命名的不同格式的檔案。
# -*- coding: utf-8 -*- import os import glob print(os.listdir('test_folder'))
Output:
['0.txt', '1.txt', '3.jpg', '4.jpg', '5.png']
這裡我們先使用了 os.listdir()
列出了 test_folder 底下的 5 個檔案。
print(glob.glob('./*/*'))
Output:
['.\test_folder\0.txt', '.\test_folder\1.txt', '.\test_folder\3.jpg', '.\test_folder\4.jpg', '.\test_folder\5.png']
這裡我們匹配的規則是所有資料夾底下的所有檔案,由於我們只有 test_folder 這一個資料夾,於是只列出了 test_folder 底下的任意檔案。
我們只匹配 txt 文件。
print(glob.glob('./*/*txt'))
Output:
['.\test_folder\0.txt', '.\test_folder\1.txt']
另外,若我們沒有要將匹配到的文件路徑儲存起來,我們也可以使用 glob.iglob()
來返回可迭代的結果。
print(glob.iglob('*/*.jpg')) for file in glob.iglob('*/*.jpg'): print(file)
Output:
<generator object _iglob at 0x000001935F68FD58>
test_folder\3.jpg
test_folder\4.jpg
如果我們想要匹配有跳脫字元(例如 ? * 之類的文字),我們可以使用 glob.escape() 來自動產生匹配的規則。
print(glob.escape('./*/*.jpg'))
Output:
./[]/[].jpg