Skip to content

[Python] 使用 glob 模組透過 UNIX 規則匹配檔案

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
Tags:

Leave a Reply