首頁  >  文章  >  後端開發  >  如何在Python中有效率地列出遞歸子資料夾中的檔案?

如何在Python中有效率地列出遞歸子資料夾中的檔案?

Barbara Streisand
Barbara Streisand原創
2024-10-31 22:07:17642瀏覽

How to Efficiently List Files from Recursive Subfolders in Python?

遞歸子資料夾搜尋以列出檔案:如何最佳化流程

搜尋子資料夾並建立特定檔案類型的清單時,必須確保子資料夾變數指向正確的資料夾。以下程式碼片段示範了此問題:

<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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn