在 Python 中列出目錄和子目錄中的所有檔案

Fariba Laiq 2023年1月30日
  1. 在 Python 中使用 os.walk() 來列出目錄和子目錄中的所有檔案
  2. 在 Python 中使用 listdir() 列出目錄和子目錄中的所有檔案
  3. 在 Python 中使用 glob 列出目錄和子目錄中的所有檔案
在 Python 中列出目錄和子目錄中的所有檔案

Python 提供了許多方法來訪問目錄和子目錄中的檔案列表。本指南將介紹 os.walk()listdir()glob

在 Python 中使用 os.walk() 來列出目錄和子目錄中的所有檔案

Python 中的 os 模組提供了一種與作業系統互動的方法。它有許多處理檔案系統的內建函式。

我們可以使用這個模組獲取、建立、刪除和更改目錄。walk() 是一種遞迴方法,它通過自上而下或自下而上的方式在目錄樹中生成檔名。

在下面的程式碼中,我們顯示了目錄和 MyFolder 的子目錄中的檔案。在我們的例子中,這個資料夾位於 Python 環境的主目錄中。

示例程式碼:

import os

root = "MyFolder"
for path, subdirs, files in os.walk(root):
    for name in files:
        print(os.path.join(path, name))

輸出:

MyFolder\text_file1.txt
MyFolder\text_file2.txt
MyFolder\SubFolder1\text_file3.txt
MyFolder\SubFolder1\text_file4.txt

在 Python 中使用 listdir() 列出目錄和子目錄中的所有檔案

在下面的程式碼中,我們遍歷目錄樹並訪問它的檔案和子檔案,而不使用 walk 方法。我們已將根資料夾 MyFolder 指定為起點。

然後我們使用 listdir() 訪問該資料夾的目錄和子目錄並將它們儲存在專案中。我們將專案名稱與之前的路徑連線起來,並使用 isdir() 方法檢查它是否是目錄。

如果是這樣,我們將進一步搜尋該目錄並應用相同的過程。如果檔名是檔名,我們已將檔名附加到上一個路徑並顯示它們。

示例程式碼:

import os

root = "MyFolder"
files = []
walk = [root]
while walk:
    folder = walk.pop(0) + "/"
    items = os.listdir(folder)  # items = folders + files
    for i in items:
        i = folder + i
        (walk if os.path.isdir(i) else files).append(i)
print(files)

輸出:

['MyFolder/text_file1.txt', 'MyFolder/text_file2.txt', 'MyFolder/SubFolder1/text_file3.txt', 'MyFolder/SubFolder1/text_file4.txt']

在 Python 中使用 glob 列出目錄和子目錄中的所有檔案

glob 是 Python 中的一個內建模組,代表 global。此模組返回名稱和副檔名與特定模式匹配的所有檔案路徑。

這裡我們使用了*.*,它表示任何具有任何副檔名的檔名。我們使用 glob.glob() 在目錄或子目錄中遞迴查詢檔案。

如果 recursive 設定為 True,則模式 ** 將匹配任何檔案以及零個或多個資料夾和子目錄。

示例程式碼:

import glob

path = "MyFolder\**\*.*"
for file in glob.glob(path, recursive=True):
    print(file)

輸出:

MyFolder\text_file1.txt
MyFolder\text_file2.txt
MyFolder\SubFolder1\text_file3.txt
MyFolder\SubFolder1\text_file4.txt
作者: Fariba Laiq
Fariba Laiq avatar Fariba Laiq avatar

I am Fariba Laiq from Pakistan. An android app developer, technical content writer, and coding instructor. Writing has always been one of my passions. I love to learn, implement and convey my knowledge to others.

LinkedIn

相關文章 - Python Directory