Python 文件遍历方式 os.walk 与 os.listdir 的对比
一、引言
在日常开发中,文件遍历是处理目录结构和文件管理的常见需求。Python 标准库中的os模块提供了多种方法,其中os.walk和 os.listdir 是常用的文件遍历方式。它们各有优缺点,适用于不同的场景。本文将通过代码示例对比os.walk和 os.listdir,帮助大家更好地理解它们的使用方式。
二、 os.walk
与 os.listdir
简介
os.walk
:- 递归遍历目录树,返回每一个目录路径、子目录列表、文件列表。
- 可以深入到子目录,并逐层返回每一层的目录和文件。
os.listdir
:- 仅返回当前目录下的文件和子目录,不会深入子目录。
- 适合只需要获取某个目录的直接内容时使用。
三、示例代码对比
假设有以下目录结构:
your_directory/
file1.txt
file2.csv
subdir1/
file3.txt
subdir2/
file4.csv
1. 使用os.walk
import os
# 需要遍历的文件目录路径
root_folder = "./your_direct"
# 递归地遍历整个文件夹的所有文件(包括目录)
for root, dirs, files in os.walk(root_folder):
print(f"当前目录路径: {root}")
print(f"子目录: {dirs}")
print(f"文件: {files}")
print("-" * 40)
运行结果:
当前目录路径: ./your_direct
子目录: [‘subdir1’, ‘subdir2’]
文件: [‘file1.txt’, ‘file2.csv’]
—————————————-
当前目录路径: ./your_direct\subdir1
子目录: []
文件: [‘file3.txt’]
—————————————-
当前目录路径: ./your_direct\subdir2
子目录: []
文件: [‘file4.csv’]
—————————————-
2. 使用os.listdir
import os
# 需要遍历的文件目录路径
root_folder = "./your_direct"
# 只遍历当前目录子文件(目录),无法深入。
print("当前目录的直接子文件(目录):", os.listdir(root_folder))
# 运行结果
当前目录的直接子文件(目录): [‘file1.txt’, ‘file2.csv’, ‘subdir1’, ‘subdir2’]
四、 代码解析
os.walk
: 该方法会递归遍历给定目录下的所有文件和子目录。每一层的目录和文件会分别输出。可以看到它会返回三个值:root
: 当前目录路径dirs
: 当前目录中的子目录列表files
: 当前目录中的文件列表- 优点:可以递归深入到每一个子目录中,适合遍历复杂的目录结构。
缺点:相对来说性能消耗较大,因为要遍历整个目录树。 os.listdir
: 该方法只返回当前目录下的文件和子目录,不会深入到子目录中。优点:简单高效,适合只需要获取当前目录内容的场景。
缺点:不能递归遍历,无法获取子目录中的内容。
五、 使用场景总结
- 使用
os.walk
的场景: - 需要遍历整个目录树。
- 需要获取某个目录下的所有文件和子目录,包括子目录的内容。
- 使用
os.listdir
的场景: - 只需获取当前目录的直接子目录和文件,不需要递归。
- 对性能要求较高时,因为它只处理当前目录,性能消耗较小。
六、 结论
通过上述对比,可以发现 os.walk
和 os.listdir
各有特点。os.walk
适合需要递归遍历所有目录的场景,而 os.listdir
更适合简单、高效的当前目录操作。开发者可以根据项目需求选择合适的遍历方式,同时可以结合os.path.join()进行路径拼接做进一步数据处理。希望这篇文章能够帮助你更好地理解这两种方法的区别与应用。
作者:不会程序的qwq