如何在Python中迭代給定目錄下的檔案?
迭代給定目錄中的檔案對於執行諸如查詢符合特定條件的檔案或統計目錄中檔案數量之類的操作非常有用。Python 提供以下五種方法來遍歷目錄中所有現有檔案
os.listdir() 方法
os.walk() 方法
os.scandir() 方法
使用 pathlib 模組
glob.iglob() 方法
讓我們詳細瞭解這些方法。
使用 os.listdir() 方法
os.listdir() 方法用於列出目錄中存在的所有檔案。它接受目錄的路徑作為引數,並返回所有條目(除了“.”和“..”之類的特殊條目)作為列表。
以下是此方法的語法:
os.listdir(path)
示例
在以下示例中,我們嘗試使用 for 迴圈列出當前目錄中存在的所有檔案。
import os, sys path = "." dir = os.listdir( path ) for file in dir: print(file)
輸出
輸出顯示如下
main.py
使用 os.walk() 方法
os.walk() 函式透過自上而下或自下而上遍歷目錄樹來生成目錄樹中的檔名。它為樹中以目錄 top 為根的每個目錄返回一個三元組:(path, names, filenames)
path 是一個字串,表示目錄的路徑。names 變數包含 path 中不以 '.' 或 '..' 開頭的子目錄名稱列表。filenames 變數包含 path 中非目錄檔案的名稱列表。
示例
在以下示例中,讓我們在迴圈語句中使用 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']
使用 os.listdir() 方法
os.listdir(my_path) 方法將獲取 my_path 目錄中存在的所有內容,包括檔案和子目錄。即使沒有迴圈語句,也可以使用此方法列出目錄中存在的所有檔案和子目錄。但是,要迭代這些檔案,必須使用迴圈語句。
示例
在以下示例中,我們將嘗試在迴圈語句中使用 os.listdir() 方法來迭代目錄中存在的所有檔案。
import os path = "." for file_names in os.listdir(path): print(file_names)
輸出
main.py
使用 pathlib 模組
pathlib 模組提供表示檔案系統路徑的類。它類似於 path 模組,但 path 模組建立字串來表示檔案路徑,而 pathlib 模組建立物件。在此模組中,我們使用 glob() 方法列出目錄中存在的檔案和子目錄。
glob() 方法接受模式作為引數,並將此模式與目錄中存在的檔案匹配。如果檔案被認為與模式匹配,則將其返回。如果要返回目錄中的所有檔案,請將星號 (*) 作為引數傳遞。
示例
讓我們嘗試使用 glob() 方法列印根目錄中存在的所有檔案和子目錄的名稱。示例如下所示。
from pathlib import Path root_directory = Path('.') size = 0 for f in root_directory.glob("*"): print(f)
輸出
main.py
使用 glob 模組
python 中的 glob 模組用於搜尋目錄中的檔案。它使用模式並將其與目錄中存在的檔案匹配。如果檔案被認為與模式匹配,則列出它們。
此模組通常使用 iglob() 方法遞迴搜尋檔案。與 glob() 方法一樣,它也接受模式作為引數,並將此模式與目錄中存在的檔案匹配。如果檔案被認為與模式匹配,則將其返回。如果要返回目錄中的所有檔案,請將星號 (*) 作為引數傳遞。
示例
在此示例中,我們嘗試列出當前目錄中的所有檔案。在這裡,由於我們列出所有檔案和子目錄,因此我們將星號 (*) 作為模式傳遞。
import glob pattern = "*" for f in glob.iglob(pattern): print(f)
輸出
結果如下所示:
main.py