遞歸子資料夾搜尋與檔案擷取
在程式設計領域,遍歷目錄和擷取檔案可能是一項常見任務。一種有效的方法是採用遞歸演算法搜尋子資料夾並累積滿足特定條件的檔案清單。
遇到的問題
使用者遇到了障礙嘗試在遞歸子資料夾搜尋中建立特定檔案的清單時。該問題源於子資料夾變數拉入子資料夾清單而不是包含該檔案的目前資料夾。
子資料夾的用途
子資料夾變數旨在保存所需文件所在的主資料夾下的子資料夾的名稱
解決方案
解決此問題的關鍵在於利用“root”或“dirpath”變數而不是“subFolder”。此變數會保存遞歸期間遍歷的目前目錄的絕對路徑。透過將此路徑合併到 fileNamePath 的建置中,可以達到所需的精確度。
import os
result = [os.path.join(dp, f) for dp, dn, filenames in os.walk(PATH) for f in filenames if os.path.splitext(f)[1] == '.txt']
Glob 模組增強
另一種有效的方法是利用Python 內建的glob 模組。 Glob 擅長根據副檔名選擇檔案。
import os
from glob import glob
result = [y for x in os.walk(PATH) for y in glob(os.path.join(x[0], '*.txt'))]
產生函數
為了簡潔且有效率的實現,也可以使用生成器函數。
from itertools import chain
result = (chain.from_iterable(glob(os.path.join(x[0], '*.txt')) for x in os.walk('.')))
Python 3.4 解決方案
如果您使用的是Python 3.4或更高版本,您可以利用pathlib模組的rglob()函數。
from pathlib import Path
result = list(Path(".").rglob("*.[tT][xX][tT]"))
這些方法為遞歸搜尋子資料夾並編譯清單提供了有效的解決方案符合所需條件的文件,讓您的文件檢索任務變得輕而易舉。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3