Python 目录与文件遍历:os.listdir 与 os.walk 详解

Finn
Finn
发布时间:2026-10-13| 6人浏览过
原创

本文介绍 Python 中扫描目录的两种核心方法:os.listdir 和 os.walk。os.listdir 返回当前路径文件名列表,需递归获取子目录文件;os.walk 则通过三元组 (root, dirs, files) 高效遍历目录树。文章还列举了 os.path 模块中分离文件名、判断存在性及获取大小等常用辅助方法,帮助开发者批量处理文件与目录。

Python 目录扫描概述

在实际开发中,经常需要扫描指定目录并对文件进行批量处理。针对这一需求,本文对 Python 中的目录处理机制进行了梳理与总结。Python 提供了两种主要的目录扫描方式:os.listdir 和 os.walk。

os.listdir 方法详解

一、os.listdir 方法

os.listdir() 函数用于返回指定目录下包含的文件或子目录名称列表,结果按字母顺序排列。需要注意的是,该函数仅返回当前路径下的文件名,不包含子目录中的文件;若需获取所有层级的文件,必须配合递归使用。此外,返回的列表中不包含 '.' 和 '..',即使它们存在于目录中。

语法格式如下:


os.listdir(path)

实例代码


def list_dir(file_dir):
  '''
    通过 listdir 得到的是仅当前路径下的文件名,不包括子目录中的文件,如果需要得到所有文件需要递归
  '''
  print'\n\n<><><><><><> listdir <><><><><><>'
  print "current dir : {0}".format(file_dir)
  dir_list = os.listdir(file_dir)
  for cur_file in dir_list:
    # 获取文件的绝对路径
    path = os.path.join(file_dir, cur_file)
    if os.path.isfile(path): # 判断是否是文件还是目录需要用绝对路径
      print "{0} : is file!".format(cur_file)
    if os.path.isdir(path):
      print "{0} : is dir!".format(cur_file)
      list_dir(path) # 递归子目录

os.walk 方法详解

二、os.walk 方法

os.walk() 函数用于在目录树中遍历并输出文件名,支持向上或向下遍历。作为一个简单易用的文件与目录遍历器,它能帮助开发者高效地处理文件和目录相关任务。

语法格式如下:


os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])

方法参数说明:

  • top:指定要遍历的目录路径。
  • topdown:可选参数。若为 True,则优先遍历 top 目录及其子目录;若为 False,则优先遍历 top 的子目录。默认值为 True。
  • onerror:可选参数,需为一个可调用对象。当 walk 发生异常时调用该对象。
  • followlinks:可选参数。若为 True,则会遍历符号链接(Linux 下)实际指向的目录;默认值为 False。
  • args:包含那些没有 '-' 或 '--' 的参数列表。

返回值: 三元组 (root, dirs, files)

  • root :表示当前正在遍历的目录地址。
  • dirs :当前文件夹中所有目录名称的列表(不包括子目录)。
  • files :当前文件夹中所有的文件列表(不包括子目录中的文件)。

实例


def work_dir(file_dir):
  print'\n\n<><><><><> work dir <><><><><>'
  for root, dirs, files in os.walk(file_dir):
    print'\n========================================'
    print "root : {0}".format(root)
    print "dirs : {0}".format(dirs)
    print "files : {0}".format(files)
​
    for file in files:
      try:
        print'-----------------------------------'
        
        file_name = os.path.splitext(file)[0]
        file_suffix = os.path.splitext(file)[1]
        file_path = os.path.join(root, file)
        file_abs_path = os.path.abspath(file)
        file_parent = os.path.dirname(file_path)
​
        print "file : {0}".format(file)
        print "file_name : {0}".format(file_name)
        print "file_suffix : {0}".format(file_suffix)
        print "file_path : {0}".format(file_path)
        print "file_abs_path : {0}".format(file_abs_path)
        print "file_parent : {0}".format(file_parent)
        
      except Exception, e:
        print "Exception", e

其他常用文件处理方法

三、其他跟文件相关的常用方法

os.path.splitext():用于分离文件名和扩展名。


file = "file_test.txt"
file_name = os.path.splitext(file)[0] # 输出:file_test
file_suffix = os.path.splitext(file)[1] # 输出:.txt

os.path.exists():用于判断文件或目录是否存在。

os.path.isfile():用于判断路径是否为文件。

os.path.isdir():用于判断路径是否为目录。

os.path.dirname():用于获取当前文件所在的父目录。

os.makedirs():用于创建多级目录。

os.mkdir():用于创建单级目录。

os.path.getsize():用于获取文件大小。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。