Python 如何得到資料夾下的所有檔案

Jinku Hu 2023年1月30日
  1. os.listdir
  2. os.walk
  3. glob.glob
Python 如何得到資料夾下的所有檔案

你可以至少有 3 種方法來列出給定資料夾下的所有檔案,使用的函式分別為 os.listdiros.walkglob.glob

下面列出的是本教程程式碼的一些預設條件,

  1. Python 版本-Python 3
  2. 給定資料夾的名字為 dirPath,並且它存在在系統中,所以程式碼中我們就不必檢查資料夾是否存在。

os.listdir

os.listdir 列出了給定資料夾下的所有檔案和資料夾,所以我們需要新增額外的程式碼來只把檔案給提取出來。

import os

dirPath = r"C:\git\DelftStack\content"
result = [f for f in os.listdir(dirPath) if os.path.isfile(os.path.join(dirPath, f))]
print(result)

os.listdir 只返回相對給定資料夾 dirPath 的相對路徑,但是函式 os.path.isfile 需要的是完整資料夾路徑來檢查輸入是不是檔案,所以我們需要用函式 os.path.join 來把 dirPathos.listdir 的結果組合起來,組成檔案或資料夾的完整路徑。

os.walk

os.walk 可以按照深度優先的順序遍歷整個資料夾,並且當它遍歷到一個新的(子)資料夾時候會產生一個 3 個元素的元組-(dirpath, dirname, filenames),這其中也包括最高階別的給定資料夾本身。

給定資料夾下的所有檔案都會在 os.walk() 發生器的第一次遍歷中產生,所以得到所有檔案的最 Pythonic 的方式就是,

import os

dirPath = r"C:\git\DelftStack\content"
result = next(os.walk(dirPath))[2]
print(result)
提示
例子中輸出的結果只是檔名本身,假如需要完整路徑的話,需要結合 dirpath 來組成完整的資訊。

glob.glob

glob 模組是按照給定的檔案的模式來去匹配資料夾中的內容,模式遵循的是 Unix shell 中的規則。

glob.glob 返回結果是匹配給定模式的帶完整路徑的檔名。我們需要查詢的是所有檔案,它們符合的命名模式是*.*,這裡萬用字元*匹配的是任意長度的字串。

import glob

dirPathPattern = r"C:\git\DelftStack\content\*.*"
result = glog.glob(dirPathPattern)
print(result)

glob.glob 返回的是匹配檔案的完整路徑,比如 C:\git\DelftStack\content\about.rst.

警告

上面例子中 glob.glob 方法不能保證列出來的所有結果都是檔案,因為它只是檢查路徑名符不符合給定的模式,但它不檢查它到底是一個資料夾還是一個資料夾。比如,假如一個資料夾的名字是 test.test,它也符合*.*模式,那這個資料夾也會在結果中出現。

假如你需要確保輸出結果只包含檔案的話,需要用 os.path.isfile 函式來驗證。

作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 創辦人。Jinku 在機器人和汽車行業工作了8多年。他在自動測試、遠端測試及從耐久性測試中創建報告時磨練了自己的程式設計技能。他擁有電氣/ 電子工程背景,但他也擴展了自己的興趣到嵌入式電子、嵌入式程式設計以及前端和後端程式設計。

LinkedIn Facebook

相關文章 - Python File

相關文章 - Python Dictionary