搜尋子資料夾並建立特定檔案類型的清單時,必須確保子資料夾變數指向正確的資料夾。以下程式碼片段示範了此問題:
<code class="python">for root, subFolder, files in os.walk(PATH): for item in files: if item.endswith(".txt"): fileNamePath = str(os.path.join(root, subFolder, item))</code>
此處,subFolder 變數包含子資料夾列表,而不是 ITEM 檔案所在的資料夾。為了修正這個問題,我們可以使用由 root 變數表示的 dirpath,因為它保存了正確的目錄路徑。這個修改後的程式碼片段解決了這個問題:
<code class="python">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']</code>
另一個優雅的方法是利用glob 模組,它根據擴展名有效地選擇檔案:
<code class="python">from glob import glob result = [y for x in os.walk(PATH) for y in glob(os.path.join(x[0], '*.txt'))]</code>
Python 3.4 及更高版本提供基於glob 的解決方案的生成器版本:
<code class="python">from itertools import chain result = (chain.from_iterable(glob(os.path.join(x[0], '*.txt')) for x in os.walk('.')))</code>
最後,對於Python 3.4 ,使用pathlib 模組的現代方法是:
<code class="python">from pathlib import Path result = list(Path(".").rglob("*.[tT][xX][tT]"))</code>
以上是如何在Python中有效率地列出遞歸子資料夾中的檔案?的詳細內容。更多資訊請關注PHP中文網其他相關文章!