您如何在 Python 中按创建日期对目录列表进行排序?


在 Python 中管理文件和目录时,经常会出现需要按创建日期对目录列表进行排序的情况。按创建日期对文件和目录进行排序的任务对于各种目的都是有益的,比如分析最近添加的文件或基于时间顺序组织数据。Python 具有多种方法和技术可以高效实现此目标。通过使用“os”模块、“pathlib”模块或第三方库,您可以轻松地按创建日期获取排序的目录列表。

在这篇详尽的文章中,我们将继续探讨在 Python 中按创建日期对目录列表进行排序的不同方法。我们还将提供分步说明和代码示例来指导您完成此过程。无论您喜欢使用“os”模块、“pathlib”模块还是像“sortedcontainers”这样的外部库,本文都将为您提供有效导航和组织目录内容的工具。

让我们使用 Python 开启这趟文件目录探索之旅,并深入了解如何根据创建日期获取一个已排序的文件目录列表!

使用 os.listdir() 与 sorted() 和 os.path.getctime()

“os.listdir()” 函数允许我们获取某个给定目录中的项目列表(文件和目录)。通过使用“sorted()”函数和一个自定义键函数来获取每个项目的创建日期,我们可以实现根据创建日期对文件目录进行排序。

示例

  • 首先,在下面给出的代码中,导入“os”模块。

  • “sorted_directory_listing_by_creation_time_with_os_listdir()”函数获取“directory”作为输入,并使用“os.listdir()”、“sorted()”和“os.path.getctime()”来返回根据创建日期对文件目录进行排序。

  • “get_creation_time()”函数定义在主函数中。此函数获取一个“item”(文件或目录名称),并使用“os.path.getctime()”返回该项目的创建日期。

  • “os.listdir(directory)”用于获取指定目录中的项目列表(文件和目录)。

  • 项目列表已按“sorted()”函数返回的值进行排序。

import os

def sorted_directory_listing_by_creation_time_with_os_listdir(directory):
    def get_creation_time(item):
        item_path = os.path.join(directory, item)
        return os.path.getctime(item_path)

    items = os.listdir(directory)
    sorted_items = sorted(items, key=get_creation_time)
    return sorted_items

使用 os.scandir() 与 sorted() 和 stat()

我们发现“os.scandir()”函数是一个更加高效且更好的选择,可用于获取目录内容。然后我们可以使用“sorted()”和一个自定义键函数,该函数使用“os.stat()”获取每個条目的创建日期。

示例

  • 在这个示例中,我们使用 Python 中的“os.scandir()”函数和“sorted()”来获取根据创建日期排序的文件目录列表。

  • “sorted_directory_listing_by_creation_time_with_os_scandir()”函数获取“directory”作为输入,并使用“os.scandir()”、“sorted()”和“os.stat()”来返回经过排序的文件目录列表。

  • 我们随后在主函数中定义“get_creation_time()”函数。此函数接受一个“entry”(文件目录对象)并使用“entry.stat().st_ctime”输出该条目的创建日期。

  • 此处,“with”语句用于确保在块执行后正确清理资源。

  • 我们在“sorted()”中使用 lambda 函数作为“key”参数,该参数要求排序应基于“get_creation_time()”函数返回的值。

import os

def sorted_directory_listing_by_creation_time_with_os_scandir(directory):
    def get_creation_time(entry):
        return entry.stat().st_ctime

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

使用 pathlib.Path.iterdir() 与 sorted() 和 stat()

我们发现“pathlib”模块提供了一种相对现代且便捷的方式来管理文件路径。我们使用“sorted()”和一个自定义键函数,该函数使用“os.stat()”来检索每个项目的创建日期。

示例

  • 此处,我们从“pathlib”模块中导入“Path”类。

  • “sorted_directory_listing_by_creation_time_with_pathlib_iterdir()”函数接受“directory”作为输入,并使用“Path.iterdir()”、“sorted()”和“os.stat()”来返回经过排序的文件目录列表。

  • 我们继续在主函数中定义“get_creation_time()”函数。此函数获取一个“item”(文件或目录对象),并使用“item.stat().st_ctime”输出该项目的创建日期。

  • 然后使用“Path(directory)”创建一个“Path”对象,其中“directory”为输入目录。

  • “path_object.iterdir()”函数用于获取指定目录中的项目(文件和目录)的迭代器。

  • “sorted()”函数然后基于“get_creation_time()”函数返回的值对项目列表进行排序。

from pathlib import Path

def sorted_directory_listing_by_creation_time_with_pathlib_iterdir(directory):
    def get_creation_time(item):
        return item.stat().st_ctime

    path_object = Path(directory)
    items = path_object.iterdir()
    sorted_items = sorted(items, key=get_creation_time)
    return [item.name for item in sorted_items]

使用外部库 sortedcontainers

在效率和性能至关重要的用例中,我们可以选择使用“sortedcontainers”等外部库来获取基于创建日期的有序目录列表。

示例

  • 现在,您已了解了“sorted_directory_listing_by_creation_time_with_sortedcontainers()" 函数展示如何使用“sortedcontainers”库来获取基于创建日期的有序目录列表。

  • 首先,使用“pip install sortedcontainers”安装“sortedcontainers”库。

  • 该函数以“directory”为输入,并使用“sortedcontainers”的“SortedList”类和“os.path.getctime()”,返回有序的目录列表。

  • “os.listdir(directory)”用于获取指定目录中的项目(文件和目录)列表。

  • 我们使用“items”列表和 lambda 函数(作为“key”参数)初始化“SortedList”类,该函数指定按“os.path.getctime()”返回的每个项目的创建日期进行排序。

import os
from sortedcontainers import SortedList

def sorted_directory_listing_by_creation_time_with_sortedcontainers(directory):
    items = os.listdir(directory)
    sorted_items = SortedList(items, key=lambda item: os.path.getctime(os.path.join(directory, item)))
    return sorted_items

使用带 sorted() 和 stat() 的 pathlib.Path.glob()

“pathlib”模块中的“Path.glob()”方法允许我们获取给定目录中项目(文件和目录)的迭代器。然后,我们继续使用“sorted()”和一个使用“os.stat()”获取每个项目创建日期的自定义键函数。

示例

  • 首先,导入“pathlib”模块中的“Path”类;它表示文件系统路径。

  • 众所周知,“sorted_directory_listing_by_creation_time_with_pathlib_glob()”函数以“directory”作为输入,并使用“Path.glob()”、“sorted()”和“os.stat()”,返回有序的目录列表。

  • “get_creation_time()”函数在主函数中定义。此函数采用“item”(文件或目录对象),并使用“item.stat().st_ctime”,输出该项目的创建日期。

  • 接下来,我们使用“Path(directory)”创建一个“Path”对象,其中“directory”是输入目录。

  • “path_object.glob('*')”用于获取指定目录中的项目(文件和目录)的迭代器。

  • “sorted()”函数然后基于“get_creation_time()”函数返回的值对项目列表进行排序。

from pathlib import Path

def sorted_directory_listing_by_creation_time_with_pathlib_glob(directory):
def get_creation_time(item):
    return item.stat().st_ctime

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

总之,获取按创建日期排序的目录列表,在 Python 中是一项强大的技能,可增强有效的文档管理和组织。我们在本文中探讨了实现此目标的多种方法和技巧,包括使用“os.listdir()”、“os.scandir()”、“pathlib.Path.iterdir()”,外部库“sortedcontainers”和“pathlib.Path.glob()”。

如果您喜欢“os”模块的简单性或“pathlib”模块的现代方法,Python 提供了灵活、高效的方法,用来基于创建日期浏览和排序目录内容。

精通这些技术,将使您能够构建稳健的应用程序,用来处理文件系统、数据分析和许多其他需要高效的目录列表排序的任务。

正确的方法的选择取决于您项目特定的要求。如果性能是主要考虑因素,则“sortedcontainers”等外部库可能是您更好的选择。另一方面,“os”和“pathlib”模块提供的内置函数提供了方便性和易用性。

更新于: 2023 年 9 月 11 日

8K+ 浏览

启动你的 职业生涯

完成课程即可获得认证

开始学习
广告
© . All rights reserved.