Python 文件遍历方式 os.walk 与 os.listdir 的对比

一、引言

在日常开发中,文件遍历是处理目录结构和文件管理的常见需求。Python 标准库中的os模块提供了多种方法,其中os.walk os.listdir 是常用的文件遍历方式。它们各有优缺点,适用于不同的场景。本文将通过代码示例对比os.walk os.listdir,帮助大家更好地理解它们的使用方式。

二、 os.walkos.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.walkos.listdir 各有特点。os.walk 适合需要递归遍历所有目录的场景,而 os.listdir 更适合简单、高效的当前目录操作。开发者可以根据项目需求选择合适的遍历方式,同时可以结合os.path.join()进行路径拼接做进一步数据处理。希望这篇文章能够帮助你更好地理解这两种方法的区别与应用。

作者:不会程序的qwq

物联沃分享整理
物联沃-IOTWORD物联网 » Python 文件遍历方式 os.walk 与 os.listdir 的对比

发表回复