如何在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 次瀏覽

開啟您的職業生涯

透過完成課程獲得認證

開始學習
廣告