如何在 Python 中遞迴掃描目錄?
目錄簡單來說就是子目錄和單個檔案的集合;或者其中之一。目錄層次結構是透過將所有檔案和子目錄組織在一個主目錄(也稱為“根”目錄)中構建的。在目錄層次結構中,這些子目錄使用“/”運算子分隔。
由於目錄以層次結構/樹的形式組織,因此掃描它可以比作遍歷樹。要做到這一點,有很多方法。
使用 os.walk() 方法
使用 glob.glob() 方法
使用 os.listdir() 方法
目錄由作業系統處理;因此,無論何時需要任何目錄的狀態更新,都需要使用 os 模組來完成。
使用 os.walk() 方法
os.walk() 函式透過自上而下或自下而上遍歷目錄樹來生成目錄樹中的檔名。它為目錄樹中以目錄頂點為根的每個目錄返回一個三元組:(路徑、名稱和檔名)
路徑是一個字串,表示目錄的路徑。names 變數包含路徑中不以 '.' 或 '..' 開頭的子目錄名稱列表。filenames 變數包含路徑中非目錄檔案的名稱列表。
示例
這裡,讓我們使用 os.walk() 方法顯示當前根目錄中存在的所有檔案和子目錄。
import os path = "." for root, d_names, f_names in os.walk(path): print(root, d_names, f_names)
輸出
讓我們編譯並執行上面的程式,以產生以下結果 -
. [] ['main.py']
示例
我們還可以為每個檔案建立一個完整路徑。為此,我們必須使用 os.path.join() 方法。此方法將為檔案建立路徑。每個檔案的這些路徑可以使用 append() 方法連線在一起,如下所示。
import os
path = "./TEST"
fname = []
for root,d_names,f_names in os.walk(path):
for f in f_names:
fname.append(os.path.join(root, f))
print("fname = %s" %fname)
輸出
上面程式的輸出如下所示 -
fname = []
示例
使用 os.walk() 方法,我們還可以選擇顯示我們想要列印的返回值元組的哪個元素。讓我們看下面的示例程式。
import os
for dirpath, dirs, files in os.walk("."):
print(dirpath) # prints paths of all subdirectories present
for dirpath, dirs, files in os.walk("."):
print(dirs) # prints the names of existing subdirectories
for dirpath, dirs, files in os.walk("."):
print(files) # prints existing files in the current directory
輸出
上面程式的輸出如下所示 -
. [] ['main.py']
使用 glob.glob() 方法
glob 模組用於獲取特定目錄中與特定模式匹配的檔名。glob.glob() 方法用於搜尋包含給定路徑規範作為引數的所有檔名。
如果路徑規範作為“*”(星號)傳遞,則該方法匹配檔名中的零個或多個字元;因此,它返回目錄中存在的所有檔案。
示例
讓我們嘗試使用 glob() 方法列印根目錄中存在的所有檔案和子目錄的名稱。示例如下所示。
from pathlib import Path
root_directory = Path('.')
size = 0
for f in root_directory.glob("*"):
print(f)
輸出
main.py
結論
我們討論瞭如何使用 os.walk() 函式在 Python 中遞迴掃描目錄。
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP