如何在Python中列出目录内容?
计算机文件系统的 目录 是一个组织特性,用于存储和定位文件。通过分层组织目录来创建目录树。目录中存在父子关系。文件夹也可以用来指代目录。随着时间的推移,Python积累了许多可以列出目录内容的API。其中有用的函数包括Path.iterdir、os.scandir、os.walk、Path.rglob和os.listdir。
我们可能需要在Python中给定目录中列出文件或文件夹的列表。您可以通过多种方式实现此目的。
更多Python相关文章,请阅读:Python 教程
OS模块
Python的OS模块提供了返回目录中文件或文件夹列表的函数。
使用Python操作系统库列出目录中的文件。Python os.listdir()方法列举目录中的每个文件和文件夹。函数os.walk()返回整个文件树中所有文件的列表。
使用Python OS库列出目录中的文件的方法有多种。
本文将介绍使用os.listdir()方法获取目录中的文件和文件夹。
使用os.listdir()方法
Python中的os.listdir()方法显示指定目录中所有文件和文件夹的列表。操作系统采用特殊条目“。”和“..”在不同目录之间导航,但此方法不返回这些条目。
此外,os.listdir()不返回第一级目录以上的文件和文件夹。换句话说,os.listdir()不返回在方法找到的子文件夹中的任何内容。指定要检索其文件和文件夹名称的目录的文件路径是os.listdir()函数接受的唯一参数。
语法
os.listdir(path)
示例
以下是使用os.listdir()方法列出目录内容的示例 –
# 导入模块
import os
# 提供目录的路径
path = 'D:\Work TP'
# 获取所有文件列表
folders = os.listdir(path)
# 遍历列表中的每个项
for s in folders:
print(s)
输出
以下是上述代码的输出 –
moving files.py
mysql_access.py
stored procedure python-sql.py
trial.py
使用os.walk()方法
可以使用os.walk()函数获取树中包含的文件列表。该方法迭代树中的每个目录。
然后,os.walk()返回目录中和任何子目录中包含的所有文件和文件夹的名称。
语法
os.walk(topdown)
topdown表示应该从上到下扫描目录,如果设置为True。如果该值为False,则从下到上扫描目录(可选)。
示例
以下是使用os.walk()方法列出目录内容的示例:
# 导入模块
import os
# 提供路径
path = 'D:\Work TP'
# 循环进行自顶向下的搜索,检索所有文件和文件夹
for root, directories, contents in os.walk(path, topdown=False):
# 将该文件所在目录与其名称结合
for name in contents:
print(os.path.join(root, name))
for name in directories:
print(os.path.join(root, name))
输出
上述代码的输出如下:
D:\Work TP\SubDirectory\How to copy files from one folder to another using Python.docx
D:\Work TP\SubDirectory\How to create an empty file using Python.docx
D:\Work TP\SubDirectory\Sarika Sample Articles (Python-MySQL Procedures).docx
D:\Work TP\SubDirectory\sql python create table.docx
D:\Work TP\moving files.py
D:\Work TP\mysql_access.py
D:\Work TP\stored procedure python-sql.py
D:\Work TP\trial.py
D:\Work TP\SubDirectory
使用 os.scandir() 方法
Scandir使用与listdir相同的目录迭代系统调用来获取指定路径上的文件名称,但是在两个方面与listdir不同。
- 返回轻量的DirEntry对象,而不是裸文件名字符串,其中包括文件名字符串并提供易于检索操作系统可能返回的任何其他数据的方法。
- scandir不会立即返回所有列表,而是像真正的迭代器一样返回生成器,与列表形成对比。
对于路径中的每个文件和子目录,scandir()都会返回一个DirEntry对象。
示例
下面是使用os.scandir()方法列出目录内容的示例:
# 导入模块
import os
# 获取特定文件夹内所有存在的文件名
dir_track = r'D:\Work TP'
for track in os.scandir(dir_track):
if track.is_file():
print(track.name)
输出
上述代码的输出如下:
moving files.py
mysql_access.py
stored procedure python-sql.py
trial.py
glob模块
Python glob模块允许我们在所有路径名中搜索,以找到符合给定模式的文件。使用Unix shell确定所提供的文件匹配模式的规则进行定义。
软件的输出按照这些指南返回一定模式匹配的文件结果。由于glob模块可以在我们本地磁盘的特定位置遍历文件列表,因此使用文件匹配模式时,我们必须满足一定的要求,模块主要遍历符合特定模式的文件列表。
使用 glob() 递归搜索文件
此函数需要两个参数:pathname和递归标志:
- pathname − 相对或绝对路径(包括文件名和完整路径)(带有类Unix shell样式通配符)。通过为glob()方法提供绝对或相对路径,我们可以进行文件搜索。具有完整目录结构的路径名称为绝对路径。相对路径是包括目录名称和一个或多个通配符的路径名。
- recursive −如果设置为True,则执行递归文件搜索。它递归地搜索当前目录的所有子目录中的所有文件。递归标志的默认设置为False。这意味着它只会在我们搜索路径中列出的文件夹中查找。
它递归地搜索当前目录的所有子目录中的所有文件。递归标志的默认设置为False。这意味着它只会在我们搜索路径中列出的文件夹中查找。
语法
glob.glob(pathname,*,recursive=False)
示例
以下是使用glob.glob()方法使用绝对路径列出目录内容的示例:
import glob
#用于搜索所有Python文件的相对路径
contents = glob.glob("D:\Work TP\*.py", recursive=True)
print(contents)
输出
以下是上述代码的输出-
['D:\Work TP\moving files.py', 'D:\Work TP\mysql_access.py', 'D:\Work TP\stored procedure python-sql.py', 'D:\Work TP\trial.py']
使用iglob()循环遍历文件
iglob()和glob()之间唯一的区别在于前者提供符合模式的文件名的迭代器。该方法生成一个迭代器对象,我们可以通过循环遍历来获取各个文件的名称。
语法
glob.iglob(pathname,*,recursive=False)
在不实际存储所有项目的情况下,返回一个输出与glob()相同值的迭代器。
调用iglob()时,它会产生一个可调用对象,将结果加载到内存中。
示例
以下是使用glob.iglob()方法列出目录内容的示例-
#导入模块
import glob
#提供路径
glob.iglob('D:\Work TP/*.py')
#迭代该目录路径下的文件
for items in glob.iglob('D:\Work TP/*.py'):
print(items)
输出
以下是上述代码的输出-
D:\Work TP\moving files.py
D:\Work TP\mysql_access.py
D:\Work TP\stored procedure python-sql.py
D:\Work TP\trial.py
Pathlib模块
我们可以使用pathlib模块,在Python 3.4开始提供一个包装器,基本上包装了大多数操作系统函数。
- import pathlib − 对于许多操作系统,Pathlib模块提供了管理文件系统路径和检索与文件相关数据的类和方法。
- 使用pathlib.Path(‘path’)构造目录的路径。
- 接下来,使用iterdir()遍历目录中的每个条目。
- 最后,使用path.isfile()函数确定当前元素是否为文件。
示例
以下是使用pathlib模块列出目录内容的示例-
# 导入模块
import pathlib
# 目录路径
dir_path = r'D:\Work TP'
# 存储文件名
res = []
# 构造路径对象
d = pathlib.Path(dir_path)
# 迭代目录
for items in d.iterdir():
# 检查是否为文件
if items.is_file():
res.append(items)
print(res)
输出
以下是上述代码的输出 –
[WindowsPath('D:/Work TP/moving files.py'), WindowsPath('D:/Work TP/mysql_access.py'), WindowsPath('D:/Work TP/stored procedure python-sql.py'), WindowsPath('D:/Work TP/trial.py')]