如何在 Python 中檢查檔案是目錄還是普通檔案?


在 Python 中處理檔案和目錄時,區分普通檔案和目錄是一個至關重要的點。瞭解每個檔案的型別對於實現不同的檔案處理操作至關重要,例如讀取、寫入或遍歷目錄結構。Python 提供了多種方法和技巧來確定給定路徑是否指向目錄或普通檔案。透過使用“os”模組、“pathlib”模組或其他專門函式,您可以輕鬆區分這兩種型別並相應地執行必要的操作。

在這篇詳盡的文章中,我們將探討在 Python 中檢查檔案是目錄還是普通檔案的不同方法。我們將提供分步說明和程式碼示例來指導您完成此過程。無論您是喜歡使用“os”模組的函式、“pathlib”模組的方法還是專門的第三方庫,本指南都將為您提供有效識別檔案型別並增強檔案處理能力的工具。

讓我們踏上這段使用 Python 進行檔案探索的旅程,揭開區分目錄和普通檔案的秘密!

使用 os.path.isdir() 和 os.path.isfile()

“os.path”模組提供了用於處理檔案路徑並確定檔案和目錄各種屬性的函式。我們可以使用“os.path.isdir()”和“os.path.isfile()”分別檢查給定路徑是否指向目錄或普通檔案。

示例

  • 在下面的程式碼中,我們匯入了“os”模組,該模組提供了與作業系統互動的函式,包括檔案和目錄操作。

  • “check_file_type_with_os_path()”函式以“directory_or_file”作為輸入,並使用“os.path.isdir()”和“os.path.isfile()”返回一個字串,指示它是目錄還是普通檔案。

  • 我們使用“os.path.isdir(directory_or_file)”來檢查提供的路徑是否指向目錄。如果是,則函式返回“Directory”。

  • 如果路徑不是目錄,我們使用“os.path.isfile(directory_or_file)”來檢查它是否指向普通檔案。如果是,則函式返回“Regular File”。

  • 如果路徑既不是目錄也不是普通檔案,則函式返回“Unknown”。

import os

def check_file_type_with_os_path(directory_or_file):
    if os.path.isdir(directory_or_file):
        return "Directory"
    elif os.path.isfile(directory_or_file):
        return "Regular File"
    else:
        return "Unknown"

利用 pathlib.Path.is_dir() 和 pathlib.Path.is_file()

“pathlib”模組提供了一種更現代、面向物件的方式來處理檔案路徑。我們可以使用“pathlib.Path.is_dir()”和“pathlib.Path.is_file()”來執行與前一個示例相同的檢查。

示例

  • 在此示例中,我們從“pathlib”模組匯入“Path”類,該類表示檔案系統路徑。

  • “check_file_type_with_pathlib()”函式以“directory_or_file”作為輸入,並使用“Path.is_dir()”和“Path.is_file()”返回一個字串,指示它是目錄還是普通檔案。

  • 我們使用“Path(directory_or_file)”建立一個“Path”物件,其中“directory_or_file”是輸入路徑。

  • 我們使用“path_object.is_dir()”來檢查路徑是否指向目錄。如果是,則函式返回“Directory”。

  • 如果路徑不是目錄,我們使用“path_object.is_file()”來檢查它是否指向普通檔案。如果是,則函式返回“Regular File”。

  • 如果路徑既不是目錄也不是普通檔案,則函式返回“Unknown”。

from pathlib import Path

def check_file_type_with_pathlib(directory_or_file):
    path_object = Path(directory_or_file)
    if path_object.is_dir():
        return "Directory"
    elif path_object.is_file():
        return "Regular File"
    else:
        return "Unknown"

使用 os.path.exists() 進行存在性檢查

在使用“os.path.isdir()”或“os.path.isfile()”確定檔案型別之前,您可能希望檢查路徑是否存在以避免引發異常。您可以為此目的使用“os.path.exists()”。

示例

  • “check_file_type_with_os_path_exists()”函式允許我們檢查提供的路徑是否存在,並使用“os.path.exists()”、“os.path.isdir()”和“os.path.isfile()”確定它是否為目錄或普通檔案。

  • 該函式以“directory_or_file”作為輸入,如果路徑存在,則返回一個字串指示檔案型別(“Directory”或“Regular File”)。

  • 我們使用“os.path.exists(directory_or_file)”來檢查路徑是否存在。如果存在,我們繼續檢查其型別。

  • 如果路徑是目錄,則函式返回“Directory”。

  • 如果路徑不是目錄,我們使用“os.path.isfile(directory_or_file)”檢查它是否為普通檔案。如果是,則函式返回“Regular File”。

  • 如果路徑不存在或既不是目錄也不是普通檔案,則函式返回“Unknown”。

import os

def check_file_type_with_os_path_exists(directory_or_file):
    if os.path.exists(directory_or_file):
        if os.path.isdir(directory_or_file):
            return "Directory"
        elif os.path.isfile(directory_or_file):
            return "Regular File"
    return "Unknown"

使用 os.scandir() 以及 is_dir() 和 is_file()

“os.scandir()”函式是獲取目錄內容的比“os.listdir()”更高效的替代方案。我們可以使用“os.scandir()”以及“is_dir()”和“is_file()”來執行檔案型別檢查。

示例

  • 在此示例中,我們使用“os.scandir()”函式以及“is_dir()”和“is_file()”來高效地檢查檔案型別。

  • “check_file_type_with_os_scandir()”函式以“directory_or_file”作為輸入,並返回一個字串,指示它是目錄還是普通檔案。

  • “with”語句用於確保在程式碼塊執行後正確清理資源。

  • 我們使用“os.scandir(directory_or_file)”來獲取指定路徑中條目(檔案和目錄)的迭代器。

  • 我們遍歷條目,對於每個條目,我們使用“entry.is_dir()”來檢查它是否表示目錄。如果是,則函式返回“Directory”。

  • 如果條目不是目錄,我們使用“entry.is_file()”來檢查它是否表示普通檔案。如果是,則函式返回“Regular File”。

  • 如果迭代器完成而沒有找到目錄或普通檔案,則函式返回“Unknown”。

import os
def check_file_type_with_os_scandir(directory_or_file):
    with os.scandir(directory_or_file) as entries:
        for entry in entries:
            if entry.is_dir():
                return "Directory"
            elif entry.is_file():
                return "Regular File"
    return "Unknown"

利用 os.path.getsize() 進行基於大小的檢查

在某些情況下,您可能需要根據其大小進一步區分普通檔案。您可以使用“os.path.getsize()”來檢查檔案是目錄、空檔案還是包含內容的普通檔案。

示例

  • “check_file_type_with_os_path_getsize()”函式允許我們使用“os.path.getsize()”來執行普通檔案之間的基於大小的區分。

  • 該函式以“directory_or_file”作為輸入,並返回一個字串,指示它是目錄、空檔案還是普通檔案。

  • 我們使用“os.path.isdir(directory_or_file)”來檢查路徑是否表示目錄。如果是,則函式返回“Directory”。

  • 如果路徑不是目錄,我們使用“os.path.getsize(directory_or_file)”來獲取檔案的大小。

  • 如果檔案的大小為 0,則函式返回“Empty File”,表示它是一個普通檔案,但沒有內容。

  • 如果檔案包含內容(即其大小大於 0),則函式返回“Regular File”。

import os

def check_file_type_with_os_path_getsize(directory_or_file):
    if os.path.isdir(directory_or_file):
        return "Directory"
    elif os.path.getsize(directory_or_file) == 0:
        return "Empty File"
    else:
        return "Regular File"

在這篇綜合文章中,我們探討了在 Python 中檢查檔案是目錄還是普通檔案的各種方法。我們涵蓋了傳統的“os”模組和更現代的“pathlib”模組,提供了多種實現相同結果的選項。此外,我們演示瞭如何使用“os.path.exists()”進行存在性檢查,以及如何使用“os.path.getsize()”在普通檔案之間進行基於大小的區分。

到目前為止,您應該已經徹底瞭解瞭如何在 Python 中區分目錄和普通檔案,並且能夠在您的檔案處理任務中應用這些技術。無論您是處理大型檔案系統、組織資料還是實現條件邏輯,這些知識對於高效和準確的檔案管理都是必不可少的。

您必須選擇最適合您的專案需求的方法,考慮諸如效能、可讀性和您需要執行的特定檔案處理操作等因素。憑藉這些新獲得的知識,您可以自信地在 Python 中瀏覽檔案系統,並釋放檔案處理工作的全部潛力。

更新於: 2023年9月11日

698 次檢視

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.