如何在 Python 中列出目录内容?

2025年1月5日 | 阅读 4 分钟

利用 Python 进行操作系统相关功能的一种方法是使用 `OS` 模块。它提供了对各种操作系统功能的访问,例如文件操作,包括创建、删除和重命名文件或目录,以及列出目录内容。

`pathlib` 模块最初于 2014 年在 Python 3.4 中发布,提供了一种面向对象的方法来处理文件系统路径。它提供了一种简单、跨平台的处理路径和文件操作的方法。

使用 OS 模块列出目录内容

使用 `os.listdir()` 方法可以返回给定路径所指示的目录中的名称列表。以下是一些需要考虑的事项:

  • 处理不存在的目录:如果提供的目录不存在,`os.listdir()` 将引发 `FileNotFoundError` 异常。因此,明智的做法是谨慎处理这些情况。
  • 目录路径处理:请确保给定的目录路径指向一个有效的目录。即使提供的路径指向一个文件而不是目录,`os.listdir()` 也会尝试列出该文件的内容,这可能会导致意外的行为。
  • 排序内容:默认情况下,`OS` 返回目录内容的顺序是任意的。如果要按字母顺序或根据其他标准对项目进行排序,请使用 `sorted()` 函数。

代码

输出

 
another_file.txt
file1.txt
file2.txt
subdirectory   

说明

  • 导入 OS 模块。
  • 目录路径是我们在其中定义的 `list_directory_contents` 函数的输入。
  • 调用 `os.listdir(path)` 以获取给定目录中文件和文件夹的列表。

使用 pathlib 模块列出目录内容

`pathlib` 模块提供了一个面向对象的接口来处理文件系统路径,并支持多种功能。以下是一些需要考虑的事项:

遍历子目录

要递归地列出子目录的内容,您可以使用 `Path.glob()` 方法来递归匹配文件和目录。

代码

输出

 
/path/to/your/directory/file1.txt
/path/to/your/directory/file2.txt
/path/to/your/directory/another_file.txt
/path/to/your/directory/subdirectory
/path/to/your/directory/subdirectory/file3.txt
/path/to/your/directory/subdirectory/another_subdirectory   

过滤文件

您可以使用带通配符模式的 `Path.glob()` 方法来过滤特定类型的文件。例如,只列出 `.txt` 文件:

代码

输出

 
/path/to/your/directory/file1.txt
/path/to/your/directory/file2.txt
/path/to/your/directory/another_file.txt   

Path 属性

`pathlib` 提供了 `.name`、`.stem` 和 `.suffix` 等属性来访问路径或文件名中的不同部分,这使得各种文件操作更加方便。

代码

输出

 
jtp.txt
jtp
.txt   

说明

  • file_path.name:返回路径的最后一个组件,在本例中是 'jtp.txt'。
  • file_path.stem:返回不带后缀的文件名,在本例中是 'jtp'。
  • file_path.suffix:返回文件扩展名,包括点,在本例中是 '.txt'。

处理符号链接和隐藏文件

在列出目录内容时,可能会遇到隐藏文件或符号链接。根据您的需求,您可以选择包含或排除它们。

代码

输出

 
jtpfile1.txt   

过滤目录内容

有时您需要根据特定标准(包括文件大小、修改日期或扩展名)过滤目录内容。方法如下:

1. 使用文件扩展名进行过滤

您可以使用列表推导或 `filter()` 方法将目录内容限制为仅具有特定扩展名的文件。

代码

输出

 
file1.txt
file2.txt   

2. 按文件大小过滤

您可以使用 `os.path.getsize()` 函数按文件大小过滤文件。

代码

输出

 
file2.txt
another_file.pdf   

性能考虑

处理大型文件夹或大量文件时会出现性能问题。由于 `os.scandir()` 函数返回一个迭代器而不是列表,因此它的性能优于 `os.listdir()`。

代码

输出

 
file1.txt
file2.txt
subdirectory
another_file.txt   

结论

总而言之,Python 提供了灵活的方式来列出目录内容,这些方式可以根据不同的上下文和需求进行定制。通过使用 `os` 和 `pathlib` 等模块,开发人员可以轻松地浏览文件系统、检索文件信息并快速执行操作。Python 具备处理符号链接和隐藏文件、根据特定标准过滤文件以及使用迭代器来最大限度地提高速度的必要功能。开发人员通过牢固掌握这些策略,可以在 Python 程序中确信地进行目录内容管理,从而确保强大可靠的文件操作。