在 Python 中列出子目录

Muhammad Maisam Abbas 2023年1月30日
  1. 使用 Python 中的 glob 模块列出子目录
  2. 使用 Python 中的 os.scandir() 函数列出子目录
  3. 使用 Python 中的 os.walk() 函数列出子目录
在 Python 中列出子目录

在 Python 中,你可以使用三种有效的方法来列出指定目录中的所有子目录:glob.glob() 函数、os.scandir() 函数和 os.walk() 函数。本教程将演示如何使用这些函数在 Python 中列出子目录。

使用 Python 中的 glob 模块列出子目录

glob 模块用于获取匹配特定模式的路径名。我们可以使用 Python 的 glob 模块中的 glob() 函数,通过在目录路径末尾指定 /*/ 来列出指定主目录的所有子目录。以下程序片段向我们展示了如何使用 glob 模块列出主目录中的所有子目录:

import os
from glob import glob

glob(os.getcwd() + "/*/", recursive=True)

输出:

['/content/sample_data/', '/content/subdirectory/']

我们在上面的代码中使用 glob 模块列出了当前工作目录的所有子目录。这种方法的缺点是它不会显示任何隐藏目录或目录名称以句点 . 开头的目录;它只显示直接子目录。

使用 Python 中的 os.scandir() 函数列出子目录

os 是 Python 中的一个内置模块,可用于许多与操作系统相关的功能,例如文件存储。os.scandir() 函数可用于列出指定主目录的所有子目录。此函数将目录路径作为输入参数并返回一个迭代器,该迭代器可用于迭代路径内的文件和目录。

以下代码片段向我们展示了如何使用 os.scandir() 函数列出主目录中的所有子目录:

import os

[f.path for f in os.scandir(os.getcwd()) if f.is_dir()]

输出:

['/content/.config',
 '/content/.ipynb_checkpoints',
 '/content/sample_data',
 '/content/subdirectory']

我们在上面的代码中使用 os.scandir() 函数列出了当前工作目录的所有子目录。此过程是对先前方法的改进,因为它还列出了隐藏目录或目录名称以句点 . 开头的目录。这种方法唯一的缺点是它只显示主父目录的直接子目录。它不会获取主目录中的子子目录。

使用 Python 中的 os.walk() 函数列出子目录

os.walk() 函数是另一种方法,可用于在 Python 中列出单个主目录中的所有子目录。os.walk() 函数将主目录的路径作为输入参数并返回一组元组,其中每个元组的第一个元素是目录树中子目录的路径。这包括所有子目录及其子目录,直到目录树结束。

os.walk() 函数还为我们提供了隐藏目录或目录名称以句点 . 开头的目录。以下代码片段向我们展示了如何使用 os.walk() 函数列出主目录中的所有子目录:

import os

[x[0] for x in os.walk(os.getcwd())]

输出:

['/content',
 '/content/.config',
 '/content/.config/logs',
 '/content/.config/logs/2021.05.06',
 '/content/.config/configurations',
 '/content/.ipynb_checkpoints',
 '/content/sample_data',
 '/content/sample_data/.ipynb_checkpoints',
 '/content/sample_data/subsubdirectory',
 '/content/subdirectory']

我们在上面的程序中使用 os.scandir() 函数列出了当前工作目录的所有子目录。如我们所见,输出显示了目录树中的所有目录。结果还包括所有隐藏目录。

尽管 os.walk() 方法向我们展示了所有子目录和所有隐藏目录的子目录,上面讨论的所有方法都有自己独特的用例,并且在不同的场景中都有帮助。我们讨论的最佳方法取决于你要解决的具体问题。

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.

LinkedIn

相关文章 - Python Directory