一文弄懂 Python os.walk(),轻松搞定文件处理和目录遍历

news2024/11/24 12:25:45

🍉 CSDN 叶庭云https://yetingyun.blog.csdn.net/


Python os 模块的 walk() 方法以自顶向下或自底向上的方式遍历指定的目录树,从而显示目录树中的文件名。对于目录树中的每个目录,os.walk() 方法都会产生一个包含目录路径、当前目录下的子目录列表和文件名的三元组

当您使用 Python 进行文件处理和目录遍历时,os.walk() 是一个非常有用的函数。这个函数允许您以递归的方式遍历一个目录树,获取关于目录结构的信息,包括其子目录和文件。接下来,我将详细解释 os.walk() 的工作原理以及如何使用它。

本文的思维导图如下所示:

在这里插入图片描述

os.walk() 的基本工作原理

os.walk(top, topdown=True, onerror=None, followlinks=False)os 模块中的一个函数,用于生成遍历目录树的文件名。这个函数返回一个三元组 (dirpath, dirnames, filenames)

  • dirpath 是一个字符串,表示正在遍历的目录的路径。
  • dirnames 是一个列表,包含了 dirpath 下所有子目录的名字。
  • filenames 是一个列表,包含了非目录文件的名字。

参数详解

  1. top:要遍历的顶级目录的路径。
  2. topdown (可选):如果为 True(默认值),则从顶级开始向下遍历。如果为 False,则从底部的子目录开始向上遍历。
  3. onerror (可选):是一个函数,用于错误处理。如果指定,则应该是一个接受单个参数(异常实例)的函数。如果未指定或为 None,错误将被忽略。
  4. followlinks (可选):如果为 True,则会遍历符号链接指向的目录。

使用示例

假设我们有以下目录结构:

my_project/
├── main.py
├── module1
│   ├── __init__.py
│   └── utils.py
└── module2
    ├── __init__.py
    └── helper.py

我们想要遍历 my_project 目录并打印出其结构:

import os

# 指定顶级目录路径
top_path = 'my_project'

# 使用 os.walk() 遍历目录
for dirpath, dirnames, filenames in os.walk(top_path):
    print(f"当前目录: {dirpath}")
    print("子目录:")
    for dirname in dirnames:
        print(f"  {dirname}")
    print("文件:")
    for filename in filenames:
        print(f"  {filename}")
    print("-" * 20)        # 打印分隔线以区分不同的目录

输出结果将是:

当前目录: my_project
子目录:
  module1
  module2
文件:
  main.py
--------------------
当前目录: my_project/module1
子目录: []
文件:
  __init__.py
  utils.py
--------------------
当前目录: my_project/module2
子目录: []
文件:
  __init__.py
  helper.py
--------------------

通过上面这个简单例子,您可以看到 os.walk() 如何能够帮助我们递归地遍历整个 my_project 目录树,并且获取每个目录中的文件和子目录列表。

总结与讨论

os.walk() 函数是 Python 中用于遍历目录树的一个非常实用的工具。这个函数会生成目录树中的文件名,通过在目录树中游走(walk)来完成这一任务。接下来,我们将探讨 os.walk() 实际上是深度优先搜索(DFS)还是广度优先搜索(BFS)。

深度优先搜索(DFS)与广度优先搜索(BFS):

  • DFS 是一种从根节点开始,沿着一条路径尽可能深地探索,直到到达叶子节点或无法继续为止,然后回溯到前一个节点,继续探索其他路径的算法。操作步骤:从根节点开始,访问一个未访问的邻居节点,然后递归地访问这个邻居节点的未访问邻居节点。当所有邻居节点都已访问或没有未访问的邻居节点时,回溯到上一个节点。优点:空间效率高,适用于路径和配置问题;缺点:时间复杂度可能高,可能不会找到最短路径。
  • BFS 是一种从根节点开始,先访问所有直接相连的邻居节点,然后访问这些邻居节点的所有邻居节点,以此类推,直到访问完所有可达节点或达到目标节点。操作步骤:使用队列存储待访问的节点,首先将根节点入队,然后从队列中取出队首节点进行访问,并将其未访问的邻居节点入队。重复这个过程,直到队列为空或找到目标节点。优点:适用于求源点与目标节点距离近的情况,如最短路径问题;缺点:可能需要较大的内存空间来存储队列中的节点。

DFS 与 BFS 的区别:

  • 数据结构:DFS 通常使用栈作为辅助数据结构,而 BFS 使用队列。
  • 访问节点的方式:DFS 是深度优先,先访问一条路径到底,然后回溯;BFS 是广度优先,先访问所有直接相连的节点。
  • 应用:DFS 适合求解一个任意符合方案中的一个或者遍历所有情况,如全排列、拓扑排序;BFS 适合求最短路径或最小步数的情况。

默认情况下,os.walk() 采用自顶向下的方式遍历目录树,可以认为这种方式较类似于深度优先搜索(DFS)。在自顶向下模式下,对于每个目录,它会首先返回该目录中的文件和子目录列表,然后递归进入子目录。os.walk() 实质上是以深度优先搜索(DFS)策略来遍历文件系统的目录树。无论是在默认的自顶向下模式还是可选的自底向上模式中,它都首选深入每个分支直到末端再回溯到其他分支


📚️ 相关链接:

  • os.walk() 的详细理解(秒懂)

  • AI 搜索 - 对 os.walk() 的基本原理和功能进行全面而透彻的调研

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1836657.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

当同时绑定mousedown和mouseup时,不执行mouseup

问题描述: 当我同时给一个标签添加mousedown和mouseup两个鼠标事件,点击span的时候会触发mousedown事件,但是不会执行mouseup事件;但是注释图二中的setCloudControl方法又能触发mouseup。 后来查阅资料,发现是在封装a…

数据资产入表-数据分类分级标准-数据分级

前情提要:2021年9月1日,《中华人民共和国数据安全法》正式施行,明确规定“国家建立数据分类分级保护制度”,数据分级分类是数据安全管理的重要措施,它涉及到对数据资产的识别、分类和定级,是保障数据合规的…

VUE 项目用 Docker+Nginx进行打包部署

一、Docker Docker 是一个容器化平台,允许你将应用程序及其依赖项打包在容器中。使用 Docker,你可以创建一个包含 Vue.js 应用程序的容器镜像,并在任何支持 Docker 的环境中运行该镜像。 二、Nginx Nginx 是一个高性能的 HTTP 服务器和反向…

递归与回溯 || 排列问题

目录 前言: 全排列 题解: 全排列 II 题解: 子集 题解: 组合 题解: 组合总和 题解: 电话号码的字母组合 题解: 字母大小写全排列 题解: 优美的排列 题解:…

MySQL数据库回顾(1)

数据库相关概念 关系型数据库 概念: 建立在关系模型基础上,由多张相互连接的二维表组成的数据库。 特点: 1.使用表存储数据,格式统一,便于维护 2.使用SQL语言操作,标准统一,使用方便 SOL SQL通用语法 …

MySQL常见面试题自测

文章目录 MySQL基础架构一、说说 MySQL 的架构?二、一条 SQL语句在MySQL中的执行过程 MySQL存储引擎一、MySQL 提供了哪些存储引擎?二、MySQL 存储引擎架构了解吗?三、MyISAM 和 InnoDB 的区别? MySQL 事务一、何谓事务&#xff1…

JCR一区 | Matlab实现GAF-PCNN、GASF-CNN、GADF-CNN的多特征输入数据分类预测/故障诊断

JJCR一区 | Matlab实现GAF-PCNN、GASF-CNN、GADF-CNN的多特征输入数据分类预测/故障诊断 目录 JJCR一区 | Matlab实现GAF-PCNN、GASF-CNN、GADF-CNN的多特征输入数据分类预测/故障诊断分类效果格拉姆矩阵图GAF-PCNNGASF-CNNGADF-CNN 基本介绍程序设计参考资料 分类效果 格拉姆…

数据结构与算法-字符出现的次数

问题描述 以下是这个找出字符串中字符串出现频率最多的字符。大家可以自行研究一下,题目不难,我今天尝试使用C语言来完成解答,但是在解答过程居然出现了一个意想不到的问题。可能是高级语言用多了,C语言某些函数的限制和风险忘记管…

Android开发系列(三)Jetpack Compose 之TextField

TextField 是一个用于接收用户输入的UI组件。它是Jetpack Compose中的一部分,可以方便地实现用户文本输入的功能。 TextField 允许用户输入一个或多个文本行,可以用于接收用户的文本输入、搜索等操作。它提供了一些常用的功能,如输入验证、键…

深入了解SD-WAN:企业广域网的未来

在讨论SD-WAN之前,我们先来了解一下WAN的基本概念。WAN(广域网)是一个连接多个地理位置分散的局域网的通信网络。在企业中,WAN通常连接总部、分支机构、托管设施和云服务等多个网络节点。广域网允许用户共享各种应用和服务&#x…

LeetCode 算法:合并两个有序链表 c++

原题链接🔗:合并两个有序链表 难度:简单⭐️ 题目 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入:l1 [1,2,4], l2 [1,3,4] 输出:…

20240616日志:大模型压缩方法DMS

Location: Beijing 1 大模型剪枝 Fig. 1.1大模型压缩-剪枝 剪枝的理论来源基于彩票假设(Lottery Ticket Hypothesis),指在神经网络中存在一种稀疏连接模式,即仅利用网络的一小部分连接(彩票)就足以实现与整…

论坛产品选型,需要关注哪些点?

论坛社区是一个经久不衰的行业,比如我们常见的宠物社区,校园社区,游戏社区、企业内部社区,品牌社区,本地同城、私域社区项目、付费社群、问答社区等等,可以说是覆盖了各行各业,那么如果我们要搭…

设备档案包括哪些内容

设备档案通常包括以下内容和要求: 1. 设备基本信息:包括设备名称、型号、规格、生产厂商、出厂日期、购买日期等。 2. 设备安装信息:包括设备的安装位置、安装日期、安装人员等。 3. 设备维护信息:包括设备的维护保养记录&#xf…

构建基于 LlamaIndex 的RAG AI Agent

I built a custom AI agent that thinks and then acts. I didnt invent it though, these agents are known as ReAct Agents and Ill show you how to build one yourself using LlamaIndex in this tutorial. 我构建了一个自定义的AI智能体,它能够思考然后行动。…

C/C++ string模拟实现

1.模拟准备 1.1因为是模拟string,防止与库发生冲突,所以需要命名空间namespace隔离一下,我们来看一下基本内容 namespace yx {class string{private://char _buff[16]; lunix下小于16字节就存buff里char* _str;size_t _size;size_t _capac…

文字炫酷祝福 含魔法代码

效果下图&#xff1a;&#xff08;可自定义显示内容&#xff09; 代码如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initi…

深度学习(十)——神经网络:非线性激活

一、Padding Layers简介 nn.ZeroPad2d&#xff1a;在输入的tensor数据类型周围用0进行填充 nn.ConstantPad2d&#xff1a;在输入的tensor数据类型周围用常数进行填充 这个函数的主要作用是对输入的图像进行填充&#xff0c;但里面所有功能都能用nn.Conv2d实现。 二、Non-li…

CAD二次开发(10)-单行文字的添加+图形修改

1. 单行文字的添加 第一步&#xff1a; 首先在CAD中新增中文样式 输入ST命令&#xff1a; 第二步&#xff1a;代码开发 /// <summary>/// 添加文本信息/// </summary>[CommandMethod("AddText")]public void AddText(){var doc Application.DocumentM…

分析医药零售数据该用哪个BI数据可视化工具?

数据是企业决策的重要依据&#xff0c;可以用于现代企业大数据可视化分析的BI工具有很多&#xff0c;各有各擅长的领域。那么哪个BI数据可视化工具分析医药零售数据又好又快&#xff1f; 做医药零售数据分析首推奥威BI数据可视化工具&#xff01; 奥威BI数据可视化工具做医药…