如何在 Python 中列出目錄中的所有檔案?


在許多檔案處理操作中,列出目錄中所有檔案的需求是 Python 中常見的場景,而且非常簡單。Python 提供了一個實用的模組 os,它提供與作業系統、目錄和檔案無縫協作的功能。我們將介紹使用實用程式碼示例列出目錄中所有檔案的不同策略和方法,並附帶詳細解釋,以幫助您理解其背後的概念。

使用 os.listdir() 列出檔案

要列出目錄中的所有檔案,可以使用 os.listdir() 函式。讓我們透過一個程式碼示例逐步講解。

示例

在這個例子中,我們首先匯入 os 模組。list_files_in_directory() 函式以 directory_path 作為引數,您可以在其中指定要列出檔案的目錄的路徑。

使用 os.listdir(directory_path),我們得到指定目錄中所有檔案和目錄的列表。然後,我們透過使用 os.path.isfile() 檢查每個元素的存在來過濾掉此列表中的所有目錄。

最後,函式返回在目錄中找到的檔案列表。如果目錄不存在,我們將處理 FileNotFoundError 並列印錯誤訊息。

使用這段程式碼片段,您可以輕鬆地使用 Python 列出目錄中的所有檔案,簡化您的檔案管理任務,並使您的編碼體驗更加愉快。

import os

def list_files_in_directory(directory_path):
   try:
      # Use os.listdir() to get a list of all files in the directory
      files_list = os.listdir(directory_path)

      # Filter out directories from the list, keeping only files
      files_list = [file for file in files_list if os.path.
isfile(os.path.join(directory_path, file))]

      return files_list

   except FileNotFoundError:
      print(f"Error: The directory '{directory_path}' 
does not exist.")
      return []

# Replace 'directory_path' with the path of the 
directory you want to list files from
directory_path = '/path/to/your/directory'
files_in_directory = list_files_in_directory(directory_path)

if files_in_directory:
   print("Files in the directory:")
   for file_name in files_in_directory:
      print(file_name)
else:
   print("No files found in the directory.")

輸出

對於某個目錄,以下是輸出結果

Files in the directory:
baz.txt
bar.txt

使用 os.listdir() 列出檔案

示例

我們首先匯入 os 模組,它提供了一些有用的函式和方法。

list_files_in_directory() 函式接受 directory_path 作為引數。directory_path 代表目標目錄的路徑。

透過使用 os.listdir(directory_path) 函式獲取目標目錄中所有檔案和目錄的列表。

我們迭代每個專案,並使用 os.path.isfile() 檢查它是否是檔案;我們只檢索檔案並將它們載入到 files_list 中。

如果特定目錄不存在,則捕獲 FileNotFoundError 並顯示錯誤訊息。

import os

def list_files_in_directory(directory_path):
   try:
      # Get a list of all files and directories
 in the specified directory
      all_items = os.listdir(directory_path)

      # Filter out only the files from the list
      files_list = [item for item in all_items if 
os.path.isfile(os.path.join(directory_path, item))]

      return files_list

   except FileNotFoundError:
      print(f"Error: The directory '{directory_path}' 
does not exist.")
      return []
# Replace 'directory_path' with the path of the directory you want to list files from
directory_path = '/path/to/your/directory'
files_in_directory = list_files_in_directory(directory_path)

if files_in_directory:
   print("Files in the directory:")
   for file_name in files_in_directory:
      print(file_name)
else:
   print("No files found in the directory.")

輸出

對於某個目錄,以下是輸出結果

Files in the directory:
baz
bar

使用 os.scandir() 進行高效列出

示例

在這個例子中,os.listdir() 被 os.scandir() 替換,以實現更高效的目錄檔案列出。

透過使用 os.scandir(directory_path),我們高效地迭代目錄條目;之後無需顯式關閉目錄。

使用 entry.is_file() 檢查 entries 中的每個條目是否為檔案;如果發現條目是檔案,我們將它的名稱新增到 files_list 中。

如前所述,我們使用相應的錯誤訊息通知 FileNotFoundError 的發生。

import os

def list_files_in_directory(directory_path):
   try:
      # Use os.scandir() for a more efficient listing
      with os.scandir(directory_path) as entries:
         files_list = [entry.name for entry in 
entries if entry.is_file()]

      return files_list

   except FileNotFoundError:
      print(f"Error: The directory '{directory_path}' 
does not exist.")
      return []

# Replace 'directory_path' with the path of 
the directory you want to list files from
directory_path = '/path/to/your/directory'
files_in_directory = list_files_in_directory(directory_path)

if files_in_directory:
   print("Files in the directory:")
   for file_name in files_in_directory:
      print(file_name)
else:
   print("No files found in the directory.")

輸出

對於某個目錄,以下是輸出結果

Files in the directory:
baz
bar

使用 os.walk() 進行遞迴列出

示例

在這個例子中,我們使用 os.walk() 來遞迴列出子目錄中的檔案。

os.walk(directory_path) 函式輸出一個生成器,其中包含包含根目錄、子目錄和該目錄中檔案的元組。

對每個元組進行迭代,併為 files 列表中的每個檔案使用 os.path.join() 建立完整的 檔案路徑,並將檔案新增到 files_list 中。

這使我們能夠獲取所有檔案的完整列表,包括子目錄中的檔案。

import os

def list_files_in_directory(directory_path):
   try:
      # Use os.walk() to get a recursive listing of all files
      files_list = []
      for root, dirs, files in os.walk(directory_path):
         for file in files:
            files_list.append(os.path.join(root, file))

      return files_list

   except FileNotFoundError:
      print(f"Error: The directory '{directory_path}' 
does not exist.")
      return []
# Replace 'directory_path' with the path of 
the directory you want to list files from
directory_path = '/path/to/your/directory'
files_in_directory = list_files_in_directory(directory_path)

if files_in_directory:
   print("Files in the directory:")
   for file_name in files_in_directory:
      print(file_name)
else:
   print("No files found in the directory.")

輸出

對於某個目錄,以下是輸出結果

Files in the directory:
/content/foo/baz
/content/foo/bar

使用 pathlib.Path() 進行現代化列出

示例

在這個最終示例中,我們利用 pathlib.Path() 的強大功能來在 Python 中進行高速檔案列出。

pathlib.Path(directory_path) 幫助建立 Path 物件;這允許我們處理目錄及其內容。

我們使用 path.iterdir() 獲取所有目錄條目的迭代器,即檔案和目錄。

使用 file.is_file(),我們確保檢查每個條目是否為檔案,如果是,則提取其名稱並將其新增到 files_list 中。

from pathlib import Path

def list_files_in_directory(directory_path):
   try:
      # Use pathlib.Path() for modern file listing
      path = Path(directory_path)
      files_list = [file.name for file in path.iterdir() if file.is_file()]

      return files_list

   except FileNotFoundError:
      print(f"Error: The directory '{directory_path}' does not exist.")
      return []
# Replace 'directory_path' with the path of the directory you want to list files from
directory_path = '/path/to/your/directory'
files_in_directory = list_files_in_directory(directory_path)

if files_in_directory:
   print("Files in the directory:")
   for file_name in files_in_directory:
      print(file_name)
else:

   print("No files found in the directory.")

輸出

對於某個目錄,以下是輸出結果

Files in the directory:
baz
bar

藉助這四個程式碼示例及其解釋,您現在可以使用 Python 列出目錄中的檔案,無論您選擇使用 os.listdir() 的常規方法、使用 os.scandir() 進行更高效的列出、使用 os.walk() 進行遞迴搜尋,還是使用 pathlib.Path() 的尖端方法,Python 都提供大量選項來滿足您的特定需求。

總而言之,列出目錄中檔案的能力和技巧是一個寶貴的工具,它簡化了檔案管理任務並增強了程式碼組織。Python 的靈活性和各種工具使我們能夠輕鬆瀏覽目錄並提取我們所需的資訊。在您繼續您的 Python 之旅時,您應該不斷磨練您的技能並探索這種多功能語言的無限可能性。

更新於:2023年7月28日

665 次瀏覽

啟動您的 職業生涯

完成課程獲得認證

開始
廣告
© . All rights reserved.