如何在 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()”函数根据“get_creation_time()”函数返回的值进行排序。

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()”函数是获取目录内容的更有效且更好的替代方案,优于“os.listdir()”。然后,我们可以使用“sorted()”和一个自定义键函数(使用“os.stat()”获取每个条目的创建时间)。

示例

  • 在本示例中,我们使用“os.scandir()”函数以及“sorted()”来获取 Python 中按创建时间排序的目录列表。

  • “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

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

来自“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.