如何在Python中按名稱排序目錄列表?


在Python中處理目錄時,通常需要獲取給定目錄中檔案和子目錄的列表。此外,按名稱對這個目錄列表進行排序對於更好的組織和可讀性非常有益。Python提供了幾種方法和技術來有效地實現此目標。按字母順序排序目錄列表可以幫助您快速找到特定檔案或目錄,並促進各種檔案管理任務。

在這篇綜合文章中,我們將探討在Python中按名稱獲取排序目錄列表的不同方法。我們將提供分步說明和程式碼示例來指導您完成此過程。無論您是喜歡使用“os”模組、“pathlib”模組還是自定義排序函式,本指南都將為您提供有效瀏覽和組織目錄內容的工具。

讓我們開始這段使用Python探索目錄的旅程,並發現獲取排序目錄列表的秘訣!

使用os.listdir()和sorted()

“os.listdir()”函式允許我們獲取給定目錄中專案(檔案和目錄)的列表。透過使用“sorted()”函式,我們可以按字母順序對該列表進行排序。

示例

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

  • “sorted_directory_listing_with_os_listdir()”函式以“directory”作為輸入,並使用“os.listdir()”和“sorted()”返回按名稱排序的目錄列表。

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

  • 然後,“sorted()”函式按字母順序對列表進行排序,並返回排序後的列表。

import os

def sorted_directory_listing_with_os_listdir(directory):
    items = os.listdir(directory)
    sorted_items = sorted(items)
    return sorted_items

使用os.scandir()和sorted()

“os.scandir()”函式是獲取目錄內容比“os.listdir()”更高效的替代方案。我們可以使用“sorted()”和自定義鍵函式來實現所需的字母排序。

示例

  • 在這個例子中,我們使用“os.scandir()”函式和“sorted()”來在Python中獲取排序的目錄列表。

  • “sorted_directory_listing_with_os_scandir()”函式以“directory”作為輸入,並使用“os.scandir()”和“sorted()”返回排序後的目錄列表。

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

  • 我們在“sorted()”中使用lambda函式作為“key”引數,這指定排序應基於“os.scandir()”返回的每個條目的“name”屬性。

  • 然後將排序後的目錄條目轉換為名稱列表,並返回排序後的列表。

import os

def sorted_directory_listing_with_os_scandir(directory):
    with os.scandir(directory) as entries:
        sorted_entries = sorted(entries, key=lambda entry: entry.name)
        sorted_items = [entry.name for entry in sorted_entries]
    return sorted_items

使用pathlib.Path.glob()和sorted()

“pathlib”模組提供了一種更現代、更方便的處理檔案路徑的方法。我們可以使用“sorted()”和“Path.glob()”來獲取排序的目錄列表。

示例

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

  • “sorted_directory_listing_with_pathlib_glob()”函式以“directory”作為輸入,並使用“Path.glob()”和“sorted()”返回排序後的目錄列表。

  • 我們使用“Path(directory)”建立一個“Path”物件,其中“directory”是輸入目錄。

  • 我們使用“path_object.glob('*')”來獲取指定目錄中專案(檔案和目錄)的迭代器。

  • “sorted()”中的lambda函式指定排序應基於“path_object.glob()”返回的每個專案的“name”屬性。

  • 然後將排序後的專案轉換為名稱列表,並返回排序後的列表。

from pathlib import Path

def sorted_directory_listing_with_pathlib_glob(directory):
    path_object = Path(directory)
    items = path_object.glob('*')
    sorted_items = sorted(items, key=lambda item: item.name)
    return [item.name for item in sorted_items]

使用sorted()和key函式進行自定義排序

在某些情況下,您可能需要根據預設字母順序以外的標準對目錄列表進行排序。您可以使用“sorted()”的自定義鍵函式來實現此目的。

示例

  • “custom_sorted_directory_listing()”函式演示瞭如何使用“sorted()”和自定義鍵函式進行目錄列表排序。

  • 該函式以“directory”作為輸入,並使用“sorted()”和自定義鍵函式返回根據自定義條件排序的目錄列表。

  • 我們在“custom_sorted_directory_listing()”中定義“sort_criteria()”函式。此函式採用一個“item”(檔案或目錄名),並使用“os.path.getsize()”返回該專案的大小(以位元組為單位)。

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

  • 然後,“sorted()”函式根據“sort_criteria()”函式返回的值對專案列表進行排序。

  • 返回排序後的列表。

import os

def custom_sorted_directory_listing(directory):
    def sort_criteria(item):
        return os.path.getsize(os.path.join(directory, item))
    
    items = os.listdir(directory)
    sorted_items = sorted(items, key=sort_criteria)
    return sorted_items

反向排序

您還可以透過將“sorted()”的“reverse”引數設定為“True”來反向(降序)排序目錄列表。

示例

  • “reverse_sorted_directory_listing()”函式說明了如何使用帶有“reverse”引數的“sorted()”來反向排序目錄列表。

  • 該函式以“directory”作為輸入,並使用帶有“reverse=True”的“sorted()”返回反向排序的目錄列表。

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

  • “sorted()”函式按反向順序對列表進行排序,並返回排序後的列表。

import os

def reverse_sorted_directory_listing(directory):
    items = os.listdir(directory)
    reverse_sorted_items = sorted(items, reverse=True)
    return reverse_sorted_items

在本綜合指南中,我們探討了在Python中按名稱獲取排序目錄列表的各種方法。無論您是喜歡使用“os”模組還是“pathlib”模組,Python都提供了多種選項來有效地獲取和組織目錄內容。此外,我們還學習瞭如何應用自定義排序條件以及如何反向排序列表。透過掌握這些技術,您可以輕鬆管理和瀏覽目錄結構,使您的檔案處理任務更高效、更有條理。

更新於:2023年9月11日

瀏覽量:13000+

啟動您的職業生涯

完成課程後獲得認證

開始
廣告
© . All rights reserved.