列出Python目录中的所有文件

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

什么是目录?

目录可以被称作包含文件和子目录的文件夹,位于系统本地文件或文件夹中。我们可以使用 Python 提供的不同函数来列出目录中存在的所有文件。

在 Python 中有多种获取目录中所有文件的方法。Python 编程语言提供了多个模块和函数来查找目录中的所有文件和文件夹。这包括:

  • OS 模块
  • Glob 模块
  • Pathlib 模块

每个模块都提供了不同的函数来列出目录中的文件和文件夹。

让我们详细了解这些方法

1. 使用 OS 模块

Python 中的 OS 模块通过不同的函数帮助与操作系统进行交互。它提供了一种与操作系统交互的方式。OS 模块下有许多用于与系统交互的函数。

在安装之前,我们需要导入 OS 库

import os

我们将学习用于列出目录中文件和文件夹的函数和方法。它们是:

  • os.listdir( )
  • os.walk( )
  • os.scandir( )

os.listdir( )

此方法用于获取目录中所有文件和文件夹的列表。它返回目录中文件和文件夹名称的列表。即使文件中有任何特殊字符,如 ',' 或 '…',它也不会返回任何特殊条目。

os.listdir( ) 的语法

其中

  • path_name = 要从中列出文件的目录的路径。

以下是使用 os.listdir( ) 列出目录中文件的几个示例:

示例 1

输出

Files present in the directory:  ['Chanchal', 'codes', 'helloo.py', 'javatpoint pro.docx', 'sketchpy.py', 'ss1.png', 'ss10.png', 'ss12.png', 'ss2.png', 'ss3.png', 'ss4.png', 'ss5.png', 'ss6.png', 'SS7.png', 'ss8.png']

示例 2

查找没有文件夹的文件程序。

输出

Enter the path of the directory: D:\\files
helloo.py
javatpoint pro.docx
sketchpy.py
ss1.png
ss10.png
ss12.png
ss2.png
ss3.png
ss4.png
ss5.png
ss6.png
SS7.png
ss8.png

在这里,我们使用了 os.listdir( ) 函数来列出 Python 目录中的文件。我们从用户那里获取目录路径输入,然后使用 for 循环从列表中删除文件夹并打印文件名。

示例 3

仅打印目录中 .txt 文件的程序。

输出

Enter the path of the directory: D:\\files
cn.txt
pp.txt
song.txt

os.walk( )

os.walk( ) 函数是 os 模块的一个子模块,用于以字典形式获取文件名。此函数以树形结构返回文件列表。os.walk( ) 函数中使用自顶向下和自底向上两种方法遍历数据。

os.walk( ) 的语法

其中

  • top = 需要从中获取文件和文件夹的顶级目录
  • topdown = 如果值为 True,则决定是否从上到下扫描目录。如果设置为 False,则从下到上扫描目录。
  • oneerror = 它将定义遍历是否继续错误或引发异常中止。
  • followlinks = 如果值为 True,它将指向符号链接。

以下是使用 os.walk( ) 函数列出目录中所有文件和文件夹的实现。

输出

The files in the directory are: 
cn.txt
pp.txt
song.txt
text.txt
text1.txt
text2.txt

此处使用 OS 模块的 os.walk( ) 函数从给定路径列出所有 .txt 文件。

os.scandir( )

scandir( ) 函数是 os 模块中的一个方法,它是一个目录迭代器函数,返回 DirEntry 对象,包括文件类型、文件名以及文件的相应信息。它类似于 os.listdir( ) 函数,但不只返回文件名列表。它通过提高速度来帮助增强 os.walk( ) 函数的性能。scandir( ) 用于 Python 3.5 及以上版本。但此方法对于较大的目录不太有用。

os.scandir( ) 的语法

其中

  • path = 目录的路径。

现在,我们将实现 os.scandir( ) 方法来获取目录中的所有文件和文件夹。

输出

Files and Folders present in the directory:
<DirEntry 'app.kv'>
<DirEntry 'Chanchal'>
<DirEntry 'cn.txt'>
<DirEntry 'codes'>
<DirEntry 'helloo.py'>
<DirEntry 'javatpoint pro.docx'>
<DirEntry 'pp.txt'>
<DirEntry 'sketchpy.py'>
<DirEntry 'song.txt'>
<DirEntry 'ss1.png'>
<DirEntry 'ss10.png'>
<DirEntry 'ss12.png'>
<DirEntry 'ss2.png'>
<DirEntry 'ss3.png'>
<DirEntry 'ss4.png'>
<DirEntry 'ss5.png'>
<DirEntry 'ss6.png'>
<DirEntry 'SS7.png'>
<DirEntry 'ss8.png'>

我们使用 os.scandir( ) 方法列出了目录中的所有文件和文件夹。它不只返回文件名,而是返回目录中存在的文件的目录条目(DirEntry)。

2. 使用 Glob 模块

glob 是 Python 中的一个库,用于使用不同的模式获取目录中存在的文件名。它使用标准的 Unix 路径扩展规则的模式规则。为了方便搜索,我们还可以使用通配符,如 '*'、'?'、[range],而不是使用精确字符串来搜索文件。这是在目录中搜索文件和文件夹的更快方法。它还可以在搜索中添加正则表达式。

在实现之前,我们需要导入 glob 库

import glob

glob 模块提供了不同的函数来从目录中搜索文件和文件夹。

  • glob( )
  • isglob( )

glob( ) 方法

glob 模块的 glob( ) 方法用于使用通配符(\*、?、[ranges])从目录中提取文件和文件夹。

glob( ) 方法的语法

其中

  • path = 目录的路径
  • wild card = 任何通配符,包括 \*、?、ranges

让我们在 Python 中实现 glob( ) 方法。

输出

D:\files\app.kv
D:\files\Chanchal
D:\files\cn.txt
D:\files\codes
D:\files\helloo.py
D:\files\javatpoint pro.docx
D:\files\pp.txt
D:\files\sketchpy.py
D:\files\song.txt
D:\files\ss1.png
D:\files\ss10.png
D:\files\ss12.png
D:\files\ss2.png
D:\files\ss3.png
D:\files\ss4.png
D:\files\ss5.png
D:\files\ss6.png
D:\files\SS7.png
D:\files\ss8.png	

这里,glob( ) 函数用于列出目录中的文件。可以使用行分隔符(\*\*/\*)来搜索特定目录中的所有文件。可以使用通配符搜索任何文件。例如,/\*txt 用于获取文本文件,/\*csv 用于获取 csv 文件。可以使用范围通配符 [0-9] 来获取目录中的前 10 个文件。

isglob( ) 方法

如果 recursive 参数为 True,则此方法用于递归获取文件名。

iglob( ) 方法的语法

其中

  • path = 目录的路径名称
  • recursive = 用于递归获取文件的参数。默认设置为 False。

现在,我们将实现 iglob( ) 函数来获取所有文件名。

输出

D:\$RECYCLE.BIN
D:\aa.py
D:\Adenoviruses_Dataset.csv
D:\aho.py
D:\app.py
D:\apple.svg
D:\Application.kv
D:\bar.svg
D:\bar2.svg
D:\bar3.svg
D:\blow.py
D:\box1.kv
D:\box2.kv
D:\box3.kv
D:\cl.py
D:\cl2.py
D:\clock.kv
D:\clock.py
D:\drawing.kv
D:\drawing.py
D:\files
D:\flower.jpeg
D:\flower_photos
D:\fruit.py
D:\GRAPH.png
D:\graph.py
D:\GRAPH.svg
D:\hello.py
D:\kivy app.py
D:\kivy_venv
D:\kiwi.py
D:\line.svg
D:\Local Disk (C) - Shortcut.lnk
D:\main.kv
D:\main.py
D:\MainWidget.kv
D:\Main_kv.kv
D:\Main_kv.py
D:\Mall_Customers.csv
D:\ppp.py
D:\Sarcasm.csv
D:\spaceship_titanic.csv
D:\supermarket_sales.csv
D:\System Volume Information
D:\Untitled-1.py
D:\Untitled-2.kv

我们使用 iglob( ) 方法来查找目录中的文件。recursive 参数设置为 False。如果设置为 True,iglob( ) 方法将搜索路径中存在的每个文件夹和目录中的文件。

3. 使用 Pathlib 模块

Pathlib 是 Python 中的一个模块,用于处理和操作文件和文件夹,以及从目录中查找文件。

pathlib 的语法

在实现之前,我们必须导入 pathlib 库。

现在,我们将实现 pathlib 模块来搜索特定目录中的文件。

输出

D:aa.py
D:Adenoviruses_Dataset.csv
D:aho.py
	D:app.py
D:apple.svg
D:Application.kv
D:bar.svg
D:bar2.svg
D:bar3.svg
D:blow.py
D:box1.kv
D:box2.kv
D:box3.kv
D:cl.py
D:cl2.py
D:clock.kv
D:clock.py
D:drawing.kv
D:drawing.py
D:flower.jpeg
D:fruit.py
D:GRAPH.png
D:graph.py
D:GRAPH.svg
D:hello.py
D:kivy app.py
D:kiwi.py
D:line.svg
D:Local Disk (C) - Shortcut.lnk
D:main.kv
D:main.py
D:MainWidget.kv
D:Main_kv.kv
D:Main_kv.py
D:Mall_Customers.csv
D:ppp.py
D:Sarcasm.csv
D:spaceship_titanic.csv
D:supermarket_sales.csv
D:Untitled-1.py
D:Untitled-2.kv

使用 pathlib( ) 函数,我们搜索目录中的所有文件。