python 获取多个多级子目录及其子文件

news/2025/1/9 11:18:21/文章来源:https://www.cnblogs.com/dgp-zjz/p/18661795

一、递归调用

1、使用os.listdir()

import osdef list_files_and_folders(path):# 遍历指定路径for item in os.listdir(path):item_path = os.path.join(path, item)  # 获取完整路径print(item_path)  # 打印当前文件或文件夹的路径if os.path.isdir(item_path):  # 如果是文件夹,则递归调用list_files_and_folders(item_path)list_files_and_folders('/root/work/')

2、使用 pathlib 模块

from pathlib import Pathdef list_files_and_folders(path):# 将传入的路径转换为 Path 对象p = Path(path)for item in p.iterdir():  # 遍历目录下的项目print(item)  # 打印文件或文件夹的路径if item.is_dir():  # 如果是文件夹,则递归调用list_files_and_folders(item)# 使用示例
list_files_and_folders('/root/work/')

二、使用os.walk

1、os.walk() 是一个生成器,用于遍历目录树。它会为每个目录生成一个三元组 (dirpath, dirnames, filenames),其中:

  • dirpath:当前访问的路径。
  • dirnames:当前路径下所有子目录的名字(不包含路径)。
  • filenames:当前路径下所有非目录文件的名字(不包含路径)。
import osdef list_files_and_folders(path):for dirpath, dirnames, filenames in os.walk(path):print(f"当前目录: {dirpath}")for dirname in dirnames:print(f"子目录: {os.path.join(dirpath, dirname)}")for filename in filenames:print(f"文件: {os.path.join(dirpath, filename)}")# 使用示例
list_files_and_folders('/root/work/')

2、案例

import os
import re# 指定包含 HTML 文件的根目录
root_directory = '/Users/sanpangdan/Desktop/emr/'# 定义去除 <data> 标签及其内容的函数
def remove_data_label(file_path):with open(file_path, 'r', encoding='utf-8') as file:content = file.read()updated_content = re.sub(r'<data>.*?</data>', '', content, flags=re.DOTALL)with open(file_path, 'w', encoding='utf-8') as file:file.write(updated_content)print('处理完成:', file_path)# 遍历目录中的所有 HTML 文件
for dirpath, dirnames, filenames in os.walk(root_directory):for filename in filenames:if filename.endswith('.html'):file_path = os.path.join(dirpath, filename)remove_data_label(file_path)print("处理完成,已去除 <data> 标签及其内容。")

补充

生成器(Generators)是 Python 中一种用于创建迭代器的简单而强大的工具。与普通的函数不同,生成器使用 `yield` 语句来返回值,而不是使用 `return` 语句。这使得生成器能够在多次调用之间保留其状态,从而在需要时生成一系列的值。

### 生成器的特点:

1. **惰性求值**:生成器会在每次请求时动态生成值,而不是一次性计算所有值。这使得生成器在处理大型数据集时更为高效,因为它们不会占用过多的内存。

2. **状态保持**:生成器能够保留状态,每次调用时从上一次停止的地方继续执行。

3. **简洁的语法**:创建生成器可以使用简单的函数定义,加上 `yield` 语句,而不需要实现完整的迭代器协议(`__iter__()` 和 `__next__()` 方法)。

### 示例代码:

def my_generator():
for i in range(5):
yield i * 2gen = my_generator()for value in gen:
print(value)

在这个例子中,`my_generator` 函数定义了一个生成器,它会依次生成 0,2,4,6,8 这些值。每次调用迭代器的方法时,生成器都会暂停并返回当前的值。

### 迭代器(Iterators):

迭代器是 Python 中一种用于遍历容器类(如列表、元组、字典等)元素的对象。一个迭代器需要实现两个方法:

1. **`__iter__()`**:返回迭代器对象本身。
2. **`__next__()`**:返回容器的下一个元素,并在没有更多元素时抛出 `StopIteration` 异常。

### 总结:

生成器是迭代器的一种特例,提供了一种更加简便和高效的创建迭代器的方法。使用生成器可以方便地处理大量的数据,同时保持代码的简洁性和可读性。

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学前端 4 个月想进中厂,该怎么做?

大厂和中厂前端的区别更多的是在技术学习的深度和推动项目的能力;而中厂和小厂前端的区别在于技术学习的广度和解决问题的能力,换言之,在能干活的基础上,干活要快,遇到问题能够自己解决。大家好,我是程序员鱼皮。收到一位编程导航鱼友的提问,想要自学前端 4 个月进入中厂…

Linux-Prometheus

Prometheus监控架构 prometheus通过各种exporter监控客户端. 常用exporternode_exporter获取主机的系统监控项. 其他项目通过各种exporter(docker运行)实现.这个部分主要讲解的是prometheus服务端的配置(连接客户端)prometheus.yml主配置文件. 静态配置 :static_configs 书写…

为什么不应将游戏逻辑写在FixedUpdate中

1)为什么不应将游戏逻辑写在FixedUpdate中2)关于il2cpp.so裁剪的问题3)3DMax怎么统计Unity的顶点数量4)Unity拉起SDK后,导致场景贴图丢失这是第417篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地掌握和学习。…

Linux其他

1. 2.Gitlab应用架构 3.运维发展史 4.云原生时代: 以Devops、SRE框架为指导,Docker/K8S/微服务为基础,用分布式方式加上 Python和 Go语言,构建一套云技术产品体系,以及进行高级管理工具的二次开发,实现属于公司自己 的自动化运维体系以及云技术体系的自动化产品。使用的自…

可视化工具在UI/UX设计中的应用与管理策略

一、设计行业的项目管理挑战 设计项目通常具有较强的创意性、变化性和协作性。与其他行业的项目管理不同,设计行业的项目管理面临一些独特的挑战: 1.1 多轮设计迭代和客户反馈 设计项目通常不是一次性完成的,而是通过多个设计迭代不断完善。每个设计阶段结束后,团队通常需要…

《安富莱嵌入式周报》第348期:开源低功耗测试仪,开源创意万用表,续航100-300小时,开源PCB电机,自制shell和网络协议栈,开源水培自动化系统

周报汇总地址:http://www.armbbs.cn/forum.php?mod=forumdisplay&fid=12&filter=typeid&typeid=104 视频版: https://www.bilibili.com/video/BV1Tzr9Y3EQ7/目录: 1、开源低功耗测试仪 2、开源创意万用表,续航100-300小时 3、低级编程和优化实现 4、资讯 (1…

16C++循环结构-(do-while循环)1——教学

1、do-while 语句; 2、各数位之和; 3、纯小数变整数; 4、数学计算一、do-while 语句 问题:每次测试后狐狸老师总会把成绩输入计算机,进行处理分析。但输入时有时会出错,如当满分为100分时,输入小于0或大于100的数,表示输入有误。试编一程序,输入某一位同学成绩时,自动检查…

南京芯麒电子-基于6U VPX的TMS320C6678+XCVU9P的高性能处理平台

概述 该平台是由16nm工艺的的XCUV9P FPGA和TI公司高性能数字信号处理器TMS320C6678构建的一款标准6U VPX高性能数据处理平台,VPX P1上定义4个x4 GTY,P2上1路PCIe x16接口、P3~P6上引出了大量GTY/GTH以及RS422/GPIO信号。板卡提供2个FMC+接口、可搭配我司各类FMC子卡使用,实现…

XTR105 XTR105UA/2K5规格书具有传感器激励和线性化的 4mA 至 20mA 电流变送器芯片

XTR105 是一款带有两个精准电流源的单片 4mA 至20mA、2 线制电流发送器。该器件在一个单集成电路上提供针对铂 RTD 温度传感器和桥、仪表放大器以及电流输出电路的完整电流激励。多用途线性化电流提供一个对 RTD 的第二阶修正,通常可以实现一个 40:1 的线性改进。仪器放大器增…

[rustGUI][iced]基于rust的GUI库iced(0.13)的部件学习(03):图像的导入、显示、调整(暨image部件的使用介绍)

前言 本文是关于iced库的部件介绍,iced库是基于rust的GUI库,作者自述是受Elm启发。 iced目前的版本是0.13.1,相较于此前的0.12版本,有较大改动。 本合集是基于新版本的关于分部件(widget)的使用介绍,包括源代码介绍、实例使用等。 环境配置 系统:window10 平台:visual…

PyTorch团队为TorchAO引入1-8比特量化,提升ARM平台性能

在深度学习模型部署和优化领域,计算效率与资源消耗的平衡一直是一个核心挑战。PyTorch团队针对这一问题推出了创新性的技术方案——在其原生低精度计算库TorchAO中引入低位运算符支持。这一技术突破不仅实现了1至8位精度的嵌入层权重量化,还支持了具有8位动态量化激活的线性运…

设计团队管理的关键因素:如何确保成员高效协作

一、设计团队的组织架构 一个高效的设计团队通常有一个明确的组织架构,合理的分工与协作关系能够最大程度地提高团队的工作效率。在设计团队的组织架构中,一般包括项目经理、设计师、协调员以及可能的开发人员和客户代表。 1.1 项目经理(PM) 项目经理是设计团队的核心角色之…