如何在 Python 中使用 os.listdir() 忽略隱藏檔案?


在 Python 中處理資料夾或目錄時,經常會遇到隱藏檔案和資料夾。隱藏檔案和資料夾是系統檔案,不希望使用者看到,可能包括配置檔案、臨時檔案和與系統相關的資料。在許多情況下,您可能希望忽略這些隱藏檔案,只處理可見檔案,以避免混亂並提高程式碼效率。

在這篇深入的文章中,我們將探討使用 Python 中的“os.listdir()”函式忽略隱藏檔案的不同方法。我們還將提供分步說明和程式碼示例,引導您完成過濾隱藏檔案並僅列出可見檔案的過程。無論您是使用“os”模組還是利用“pathlib”模組,本文都將為您提供有效處理目錄並忽略隱藏檔案的知識。

讓我們開始這段 Python 檔案處理之旅,學習如何使用“os.listdir()”忽略隱藏檔案!

使用列表推導式忽略隱藏檔案

忽略隱藏檔案並列出目錄內容的最簡單和最有效方法之一是使用列表推導式。列表推導式允許我們根據條件過濾掉特定專案,在本例中,我們可以使用它從“os.listdir()”返回的檔案列表中排除隱藏檔案。

示例

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

  • “list_visible_files_with_list_comprehension()”函式以“directory”作為輸入,並透過使用列表推導式過濾隱藏檔案來返回可見檔案的列表。

  • 我們使用“os.listdir(directory)”獲取指定目錄中專案(檔案和目錄)的列表。

  • 然後,我們使用列表推導式迭代“os.listdir()”返回的專案,並且僅包含不以點開頭(表示隱藏檔案)的專案。

  • 生成的“visible_files”列表僅包含可見檔案的名稱,我們返回此列表。

import os

def list_visible_files_with_list_comprehension(directory):
    visible_files = [file for file in os.listdir(directory) if not file.startswith('.')]
    return visible_files

使用 for 迴圈忽略隱藏檔案

忽略隱藏檔案並列出目錄內容的另一種方法是使用 for 迴圈迭代檔案,並將隱藏檔案從最終列表中排除。

示例

  • 在此示例中,我們定義了“list_visible_files_with_for_loop()”函式,該函式以“directory”作為輸入,並透過迭代“os.listdir()”返回的專案並使用 for 迴圈排除隱藏檔案來返回可見檔案的列表。

  • 我們建立一個名為“visible_files”的空列表來儲存可見檔案的名稱。

  • 使用 for 迴圈,我們迭代“os.listdir(directory)”返回的每個專案(檔案或目錄)。

  • 在迴圈內,我們檢查當前專案的名稱是否不以點開頭(表示隱藏檔案)。如果不是,我們將專案的名稱追加到“visible_files”列表中。

  • 迴圈結束後,“visible_files”列表包含可見檔案的名稱,我們返回此列表。

import os

def list_visible_files_with_for_loop(directory):
    visible_files = []
    for file in os.listdir(directory):
        if not file.startswith('.'):
            visible_files.append(file)
    return visible_files

使用輔助函式確定隱藏檔案

為了提高程式碼的可讀性和可重用性,我們可以定義一個輔助函式來檢查給定檔案是否隱藏。然後,我們可以在列出目錄內容時使用此函式過濾掉隱藏檔案。

示例

  • 在此示例中,我們定義了“is_hidden()”函式,該函式以“file”作為輸入,如果檔案以點開頭(表示隱藏檔案),則返回 True,否則返回 False。

  • “list_visible_files_with_helper_function()”函式以“directory”作為輸入,並透過使用列表推導式根據“is_hidden()”函式的結果過濾隱藏檔案來返回可見檔案的列表。

  • 我們使用“os.listdir(directory)”獲取指定目錄中專案(檔案和目錄)的列表。

  • 對於列表中的每個專案,我們呼叫“is_hidden()”函式來確定它是否為隱藏檔案。如果不是隱藏檔案,我們將它的名稱包含在“visible_files”列表中。

  • 迭代完所有專案後,“visible_files”列表包含可見檔案的名稱,我們返回此列表。

import os

def is_hidden(file):
    return file.startswith('.')

def list_visible_files_with_helper_function(directory):
    visible_files = [file for file in os.listdir(directory) if not is_hidden(file)]
    return visible_files

使用 pathlib.Path.iterdir() 忽略隱藏檔案

“pathlib”模組提供了一種更現代化、面向物件的方式來處理檔案路徑。我們可以利用“Path.iterdir()”忽略隱藏檔案,並僅列出目錄中的可見檔案。

示例

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

  • “list_visible_files_with_pathlib_iterdir()”函式以“directory”作為輸入,並透過使用列表推導式和“path_object.iterdir()”過濾隱藏檔案來返回可見檔案的列表。

  • 我們使用“Path(directory)”建立一個“Path”物件來表示輸入目錄。

  • 我們使用列表推導式迭代“path_object.iterdir()”,並且僅包含不以點開頭(表示隱藏檔案)的專案的名稱。

  • 生成的“visible_files”列表包含可見檔案的名稱,我們返回此列表。

from pathlib import Path

def list_visible_files_with_pathlib_iterdir(directory):
    path_object = Path(directory)
    visible_files = [item.name for item in path_object.iterdir() if not item.name.startswith('.')]
    return visible_files

使用生成器列出可見檔案

我們可以使用生成器一次生成一個可見檔案,而不是返回可見檔案的列表。生成器記憶體效率高,適用於包含大量檔案的龐大目錄。

示例

  • 在此示例中,我們定義了“visible_files_generator()”函式,該函式以“directory”作為輸入,並使用生成器一次生成一個可見檔名。

  • 使用 for 迴圈,我們迭代“os.listdir(directory)”返回的專案。

  • 在迴圈內,我們檢查當前專案的名稱是否不以點開頭(表示隱藏檔案)。如果不是,我們將專案的名稱生成出來。

  • “visible_files_generator()”函式不返回列表,而是返回一個生成器物件,可以使用 for 迴圈或在其他需要記憶體效率的環境中進行迭代。

import os

def visible_files_generator(directory):
    for file in os.listdir(directory):
        if not file.startswith('.'):
            yield file

在 Python 中處理資料夾或目錄時,忽略隱藏檔案是常見的需求,以便專注於相關資料並避免混亂。在這篇全面的文章中,我們探討了使用“os.listdir()”函式和“pathlib”模組實現此目標的各種方法。

我們從簡單的列表推導式和 for 迴圈開始,根據檔名過濾隱藏檔案。然後,我們演示瞭如何透過建立輔助函式來確定檔案是否隱藏來提高程式碼的可讀性和可重用性。此外,我們還探討了“pathlib”模組如何提供更現代、更優雅的目錄處理方法。

最後,我們介紹了生成器的概念,它允許我們一次生成一個可見檔名,為大型目錄提供記憶體高效的解決方案。

透過本指南獲得的知識,您現在能夠在使用 Python 處理目錄時有效地忽略隱藏檔案並專注於可見檔案。無論您處理的是小型目錄還是大型目錄,這些技巧都將增強您的檔案處理能力並簡化您的 Python 專案。

更新於: 2023年9月11日

5K+ 閱讀量

開啟你的 職業生涯

完成課程獲得認證

開始學習
廣告