如何使用 Python 获取当前目录下的所有子目录列表?

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

有时,获取目录中的文件和文件夹列表非常重要。Pathlib 模块用于在 Python 的帮助下获取当前目录中所有子目录的列表。要获取当前目录中所有子目录的列表,会创建一个路径对象,该对象取决于操作系统。在 Windows 中,路径对象由 Windows 路径提供;另一方面,在 Linux 和 macOS 中,它将返回 PosixPath。

让我们看一个示例代码

代码

输出

C:\Users\Mark Johns\OneDrive\Desktop\javatpoint

说明

在上面的代码中,导入了 pathlib 模块,将目录路径传递给 pathlib 模块提供的 Path 函数,然后打印目录。

在 Python 中获取目录中所有文件和文件夹的列表

当对 Path 对象调用 .iterdir() 方法时,它会返回一个生成器,该生成器显示子项。如果生成器由 list() 构造函数包装,则可以看到文件和文件夹的列表。

代码

输出

[WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/.vscode'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/April'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/august'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/december'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/documents'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/February'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/January'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/March'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/November'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/October'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/september')]

说明

在上面的代码中,导入了 pathlib 模块,并将目录路径传递给 pathlib 模块中的 Path 对象。借助 interdict() 函数,将返回一个由目录中所有子目录组成的生成器。借助 list 对象,打印所有子目录。

借助 for 循环,也可以打印子目录。

代码

输出

C:\Users\Mark Johns\OneDrive\Desktop\javatpoint\.vscode - dir
C:\Users\Mark Johns\OneDrive\Desktop\javatpoint\April - dir
C:\Users\Mark Johns\OneDrive\Desktop\javatpoint\august - dir
C:\Users\Mark Johns\OneDrive\Desktop\javatpoint\december - dir
C:\Users\Mark Johns\OneDrive\Desktop\javatpoint\documents - dir
C:\Users\Mark Johns\OneDrive\Desktop\javatpoint\February - dir
C:\Users\Mark Johns\OneDrive\Desktop\javatpoint\January - dir
C:\Users\Mark Johns\OneDrive\Desktop\javatpoint\March - dir
C:\Users\Mark Johns\OneDrive\Desktop\javatpoint\November - dir
C:\Users\Mark Johns\OneDrive\Desktop\javatpoint\October - dir
C:\Users\Mark Johns\OneDrive\Desktop\javatpoint\september - dir

说明

在上面的代码中,借助 for 循环,还打印了目录的类型。在 for 循环体内部,使用 f-string 显示有关每个子目录的信息。在 f-string 的第二个花括号中,使用条件表达式来打印 dir(如果项是目录)或 file(如果不是)。

代码

输出

C:\Users\Mark Johns\OneDrive\Desktop\javatpoint\April\Algorithm to Solve Sudoku.docx
C:\Users\Mark Johns\OneDrive\Desktop\javatpoint\April\Convert a datetime to a UTC timestamp in Python.docx
C:\Users\Mark Johns\OneDrive\Desktop\javatpoint\April\Daily and Weekly Report April.xlsx
C:\Users\Mark Johns\OneDrive\Desktop\javatpoint\April\email_spam.csv      
C:\Users\Mark Johns\OneDrive\Desktop\javatpoint\April\How to access the serial RS232 port in Python.docx
C:\Users\Mark Johns\OneDrive\Desktop\javatpoint\April\How to call a Variable from Another Function in Python.docx
C:\Users\Mark Johns\OneDrive\Desktop\javatpoint\April\How to convert a string to a Python class.docx
C:\Users\Mark Johns\OneDrive\Desktop\javatpoint\April\How to Convert Excel to CSV in.docx
C:\Users\Mark Johns\OneDrive\Desktop\javatpoint\April\How to create a .pyc file in Python.docx
C:\Users\Mark Johns\OneDrive\Desktop\javatpoint\April\How to find mime type of file in Python.docx
C:\Users\Mark Johns\OneDrive\Desktop\javatpoint\April\How To Get A List Of All Sub.docx
C:\Users\Mark Johns\OneDrive\Desktop\javatpoint\April\main.py
C:\Users\Mark Johns\OneDrive\Desktop\javatpoint\April\module.py
C:\Users\Mark Johns\OneDrive\Desktop\javatpoint\April\Python requests.docx
C:\Users\Mark Johns\OneDrive\Desktop\javatpoint\April\Split Pandas DataFrame by Rows in Python.docx
C:\Users\Mark Johns\OneDrive\Desktop\javatpoint\April\Untitled.ipynb      
C:\Users\Mark Johns\OneDrive\Desktop\javatpoint\April\~$w To Get A List Of All Sub.docx

说明

在上面的代码中,在 for 循环内部,如果目录是文件类型,则打印该项。

代码

输出

[WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/.vscode'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/April'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/august'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/december'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/documents'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/February'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/January'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/March'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/November'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/October'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/september')]

说明

在上面的代码中,借助用于检查项是否为目录的列表推导式中的条件表达式来过滤列表。但是,如果需要子目录中的所有文件和目录,则可以像递归函数一样使用 .iterdir(),但最好使用 r.glob() 函数来获取目录中所有子目录的列表。

使用 .rglob() 递归列出

有时,由于目录的递归性质,目录会被比作树。每个主分支被分成子分支,每个子分支又分成自己的分支,依此类推。如果递归地列出目录中的项,这意味着不仅列出了目录的内容,还列出了子目录的内容,以及它们下面的子目录的内容。借助 pathlib 模块,可以非常轻松地递归地列出目录。使用 .rglob() 函数,还可以列出目录。

代码

输出

[WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/.vscode'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/April'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/august'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/december'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/February'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/January'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/March'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/November'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/October'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/september'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/.vscode/settings.json'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/April/.ipynb_checkpoints'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/April/Algorithm to Solve Sudoku.docx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/April/Convert a datetime to a UTC timestamp in Python.docx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/April/Daily and Weekly Report April.xlsx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/April/email_spam.csv'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/April/How to access the serial RS232 port in Python.docx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/April/How to call a Variable from Another Function in Python.docx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/April/How to convert a string to a Python class.docx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/April/How to Convert Excel to CSV in.docx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/April/How to create a .pyc file in Python.docx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/April/How to find mime type of file in Python.docx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/April/How To Get A List Of All Sub.docx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/April/main.py'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/April/module.py'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/April/Python requests.docx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/April/Split Pandas DataFrame by Rows in Python.docx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/April/Untitled.ipynb'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/April/__pycache__'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/April/~$w To Get A List Of All Sub.docx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/April/.ipynb_checkpoints/Untitled-checkpoint.ipynb'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/April/__pycache__/module.cpython-39.pyc'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/august/Binomial heap program in C.docx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/august/binomial heap.c'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/august/C program to check student.docx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/august/Daily Report & Monthly Report format (2) (1).xlsx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/august/datatype.cpp'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/august/File Input and output operation in C.docx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/august/Fundamental Data type in C++.docx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/august/generic keyword'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/august/How to disable or enable the touchpad on a laptop.docx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/august/How to fix Blue Screen Error in windows.docx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/august/Introduction to Machine Learning and Its types.docx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/august/Introduction_to_Machine_Learning_and_Its_types[1].docx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/august/main.c'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/august/ml.docx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/august/Python Data Type and Variables.docx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/august/Race Condition in OS.docx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/august/Role of Machine Learning in Data Science.docx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/august/Types of Computer Cables and Ports.docx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/august/What is IF ELSE.docx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/december/Command Line Scripts with Python Packaging.docx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/december/Converting string.docx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/december/Copy all files from one directory to another using Python.docx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/december/Correcting EOF error in python in Codechef.docx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/december/Create a stacked bar plot using Matplotlib in Python.docx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/december/Create a watchdog in Python to look for filesystem changes.docx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/december/Create Basic Webpage with Pyscript in Python.docx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/december/Create Classes Dynamically in Python.docx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/december/Create multiple copies of a string in Python by using multiplication.docx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/december/Daily and Monthly Report December.xlsx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/december/How to install a Python Package from a GitHub Repository.docx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/december/How to Install NumPy on Windows.docx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/december/How to install setup tools for python on linux.docx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/december/Is python backend or Frontend.docx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/december/Isoformat in Python.docx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/december/numpy interpolation.docx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/december/pyscript'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/december/pyscript/hello_pyscript.html'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/december/pyscript/index.html'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/december/pyscript/main.py'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/december/pyscript/module.html'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/december/pyscript/my_module.py'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/February/.idea'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/February/Convert Speech to text and text to Speech in Python.docx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/February/Convert String to Unicode Characters in Python.docx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/February/covid-liver.csv'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/February/Daily Monthly Report February.xlsx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/February/Difference Between Lock and RLock objects in Python.docx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/February/Different Ways to Kill a Thread in Python.docx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/February/file.txt'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/February/Find DataType of Columns using Pandas DataFrame dtypes Property in Python.docx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/February/Get unique values from a list in.docx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/February/input.txt'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/February/main.py'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/February/new_folder'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/February/os.read() method in Python.docx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/February/os.removedirs method in Python.docx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/February/os.scandir() method in Python.docx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/February/Printing Lists as Tabular Data in Python.docx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/February/Programming Paradigms in Python.docx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/February/PUT method.docx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/February/Python Directory.docx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/February/Python Program for Method Of False Position.docx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/February/Python PySpark collect.docx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/February/urandom method in Python.docx'), WindowsPath('C:/Users/Mark Johns/OneDrive/Desktop/javatpoint/February/.idea/.gitignore')]

说明

在上面的代码中,使用 .rglob('*') 函数生成一个可以包装在 list() 构造函数中进行具体化的生成器,并递归地打印子目录列表。

借助 Python Glob 模式进行条件列表

有时,并不需要所有文件。当需要列出目录文件类型时,或者当所有项的名称中都包含特定字符模式时。与 .rglob() 相关的一个方法是 .glob() 方法。这些方法使用 glob 模式来显示路径的集合。通配符用于匹配特定条件。考虑一个示例:目录中的所有内容都由单个星号匹配。

这里有一些全局模式及其匹配项。

  1. * 用于匹配目录中的每个项。
  2. *.txt 用于匹配目录中以 .txt 结尾的每个项,例如 notes.txt 或 hello.txt。
  3. ????? 用于匹配名称为六个字符的项,例如 01.txt、A-01.c 或 .zshrc
  4. A* 用于匹配以 A 开头的每个项,例如 Album、A.txt 或 AppData。
  5. [abc][abc][abc] 用于匹配名称为三个字符但仅由 a、b 和 c 组成的每个项,例如 abc、aaa 或 cba。

结论

获取目录中所有子目录的列表非常重要,以下是获取目录中所有子目录列表的一些方法和途径。