📜  os walk 示例 - Python (1)

📅  最后修改于: 2023-12-03 15:33:20.871000             🧑  作者: Mango

使用 os.walk 实现文件遍历

在 Python 中,我们经常需要对某个目录下的所有文件进行遍历。使用 os.walk 可以很方便地实现这个功能。

os.walk 简介

os.walk 函数可以生成一个三元组,分别是当前遍历的路径、当前路径下的文件夹(列表),当前路径下的文件(列表)。

函数原型:

os.walk(top, topdown=True, onerror=None, followlinks=False) -> Iterator[Tuple[str, List[str], List[str]]]

参数说明:

  • top: 起始遍历路径
  • topdown: 是否是自上而下遍历,默认为 True
  • onerror: 遍历过程中出错时的回调函数
  • followlinks: 是否遍历符号链接指向的路径

返回值说明:

  • 生成一个三元组:(dirpath, dirnames, filenames)
  • dirpath: 当前遍历的路径
  • dirnames: 当前路径下的文件夹列表
  • filenames: 当前路径下的文件列表
示例代码

下面展示一个使用 os.walk 遍历文件夹并打印出文件路径的代码:

import os

def traverse_folder(root_folder):
    for dirpath, dirnames, filenames in os.walk(root_folder):
        for filename in filenames:
            print(os.path.join(dirpath, filename))

if __name__ == '__main__':
    traverse_folder('/path/to/root/folder')

代码说明:

  1. 导入 os 模块
  2. 定义遍历文件夹的函数 traverse_folder
  3. 使用 os.walk 遍历 root_folder 目录下的所有文件和文件夹
  4. 遍历 filenames 列表,打印出每个文件的路径
优化代码

我们可以把文件遍历的逻辑单独提取出来,让 traverse_folder 函数只负责调用文件遍历函数。

import os

def traverse_files(root_folder, func):
    """遍历文件夹下的所有文件"""
    for dirpath, dirnames, filenames in os.walk(root_folder):
        for filename in filenames:
            filepath = os.path.join(dirpath, filename)
            func(filepath)

def process_file(filepath):
    """处理文件"""
    print(filepath)

if __name__ == '__main__':
    traverse_files('/path/to/root/folder', process_file)

代码说明:

  1. 导入 os 模块
  2. 定义文件遍历函数 traverse_files 和文件处理函数 process_file
  3. 使用 traverse_files 函数遍历 root_folder 目录下的所有文件,并调用 process_file 函数进行处理
  4. process_file 函数中处理文件(这里只是简单地打印文件路径)

这样,我们可以使用 process_file 函数来实现不同的文件处理逻辑,从而达到代码复用和模块化的目的。

总结

os.walk 是 Python 中非常实用的文件遍历函数,使用方便,灵活性高,可以方便地实现文件的遍历、统计、处理等功能。