python遍历目录os.walk()
📅 2026/7/30 17:36:32
👁️ 次浏览
os.walk()是 Python 标准库os模块中用于遍历目录树的核心函数。它通过生成器Generator的方式递归地访问指定路径下的所有子目录和文件是处理文件系统批量操作如搜索、统计、重命名、删除等最高效且常用的工具之一。以下从工作原理、参数详解、返回值结构、典型应用场景及注意事项五个方面进行详细解释。1. 核心工作原理os.walk()的本质是一个目录树遍历生成器。递归遍历它会自动深入每一个子目录直到遍历完整个目录树。内存友好作为生成器它不会一次性将所有文件路径加载到内存中而是“按需”逐层 yield 数据。这使得它在处理包含数十万甚至上百万文件的超大目录时依然能保持极低的内存占用。遍历顺序支持“自上而下”Top-down和“自下而上”Bottom-up两种遍历策略。2. 函数签名与参数详解函数原型如下os.walk(top, topdownTrue, onerrorNone, followlinksFalse)参数类型默认值说明topstr/path-like必传需要遍历的根目录路径。topdownboolTrue遍历方向。-True先处理当前目录再处理子目录自上而下。-False先处理最深层的子目录最后回溯到根目录自下而上/后序遍历。注若需修改dirs列表以跳过某些子目录必须使用默认的True。onerrorcallableNone错误处理函数。当遍历过程中遇到权限不足或目录不存在等错误时会调用此函数。该函数接收一个OSError实例作为参数。若未指定错误会被忽略或抛出异常终止遍历。followlinksboolFalse是否跟随符号链接。-True访问指向目录的软链接Symbolic Links。-False不跟随软链接。警告若目录中存在循环引用的软链接设置为True可能导致无限循环。3. 返回值结构os.walk()每次迭代会返回一个三元组(root, dirs, files)root (str)当前正在遍历的目录的完整路径。dirs (list)当前目录下所有子目录的名称列表不包含路径仅文件名。重要特性如果topdownTrue你可以就地修改这个列表例如使用dirs.remove()或切片赋值os.walk()将不会进入被移除的子目录。这是实现“跳过特定文件夹”的关键机制。files (list)当前目录下所有非目录文件的名称列表不包含路径仅文件名。注意dirs和files中的名称都是相对当前root的basename不是完整路径。获取文件完整路径时必须使用os.path.join(root, name)进行拼接。4. 典型应用场景与代码示例场景一基础遍历打印所有文件路径这是最常见的用法用于查看目录结构或收集文件列表。import os path ./project # 替换为你的目标路径 for root, dirs, files in os.walk(path): for filename in files: # 必须使用 os.path.join 拼接完整路径避免手动拼接斜杠导致的跨平台问题 file_path os.path.join(root, filename) print(file_path)场景二按后缀名筛选文件如查找所有 .py 文件结合字符串方法endswith()进行过滤。import os def find_files_by_extension(root_dir, extension): py_files [] for root, dirs, files in os.walk(root_dir): for file in files: if file.endswith(extension): py_files.append(os.path.join(root, file)) return py_files # 使用示例 python_files find_files_by_extension(./src, .py) print(python_files)场景三跳过特定目录优化性能利用topdownTrue时修改dirs列表的特性跳过.git、node_modules或__pycache__等无需遍历的目录显著提升遍历速度。import os exclude_dirs {.git, node_modules, __pycache__, venv} for root, dirs, files in os.walk(./project): # 原地修改 dirs 列表移除需要排除的目录 # os.walk 在 topdownTrue 时会根据修改后的 dirs 决定下一步进入哪些子目录 dirs[:] [d for d in dirs if d not in exclude_dirs] for file in files: print(os.path.join(root, file))场景四批量重命名或移动文件结合shutil模块可以实现文件的批量处理。import os import shutil source_dir ./old_logs target_dir ./archived_logs if not os.path.exists(target_dir): os.makedirs(target_dir) for root, dirs, files in os.walk(source_dir): for file in files: if file.endswith(.log): src_path os.path.join(root, file) dst_path os.path.join(target_dir, file) # 简单示例移动文件 shutil.move(src_path, dst_path) print(fMoved: {src_path} - {dst_path})5. 进阶注意事项与最佳实践路径拼接安全错误做法root / file或root \\ file。这在 Windows 和 Linux 混用或路径末尾有无斜杠时容易出错。正确做法始终使用os.path.join(root, file)。Python 3.4 也可以使用pathlib.Path(root) / file。避免在遍历中修改目录结构如果在遍历过程中删除或移动了当前正在遍历的目录或其父目录可能会导致os.walk()行为不可预测或抛出异常。建议先收集所有路径遍历结束后再统一执行删除或移动操作。topdown的选择如果需要删除目录树建议使用topdownFalse。因为删除父目录前必须先删除其子内容自下而上的遍历顺序天然符合这一逻辑。如果需要剪枝跳过子目录必须使用topdownTrue。符号链接风险除非明确知道目录结构中没有循环引用否则不要随意设置followlinksTrue否则程序可能陷入死循环。性能考量os.walk()底层基于os.scandir()Python 3.5比旧的os.listdir()效率更高因为它能一次性获取文件属性而无需额外的系统调用。对于海量文件遍历它是首选方案。总结os.walk()是 Python 文件处理的瑞士军刀。掌握其核心在于理解三元组返回值的含义以及利用topdown参数和dirs列表的可变性来控制遍历流程。在实际开发中配合os.path.join进行路径拼接并根据需求灵活使用过滤逻辑可以高效解决绝大多数目录遍历问题。
模块:L02 文件、路径与元数据 篇号:L02-02 / 38 预计阅读:40 分钟 主线:Linux 设备与存储 文章目录本篇目标30 秒速览正文1. 为什么不能把「文件」想成一团东西2. inode:元数据住在这里3. 目录项:名字住在这…
📅 2026/7/30 17:35:31
Windows 11终极优化指南:3分钟让你的系统重获新生 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and custom…
📅 2026/7/30 17:35:31
AI 在金融行业规模化落地过程中,面临算力部署的复杂性、模型推理的性价比、以及业务场景适配等现实挑战。金融行业对安全、稳定与合规的严苛要求,更使得底层基础设施的成熟度直接决定了 AI 落地的天花板。基于对这一产业痛点的共同判断,宇信科…
📅 2026/7/30 17:35:31
Dreamer可视化工具使用指南:如何快速分析模型训练过程与结果 【免费下载链接】dreamer Dream to Control: Learning Behaviors by Latent Imagination 项目地址: https://gitcode.com/gh_mirrors/dr/dreamer
Dreamer是一个基于"Dream to Control: Learn…
📅 2026/7/30 22:49:27
不少单亲家长在给孩子办理留学、境外落户、涉外相关手续时,都需要准备非婚生子女出生公证。很多人不清楚非婚生子女和普通子女办理公证存在材料差异,加上日常工作忙碌、身处异地,专门跑线下公证处耗时耗力。经常出现往返多次、材料准备出错、…
📅 2026/7/30 22:49:27
更多请点击:
https://intelliparadigm.com
第一章:AI预训练与微调的核心范式演进 早期深度学习模型依赖从零训练(from-scratch training),需海量标注数据与算力支撑,泛化能力弱、收敛缓慢。随着Transforme…
📅 2026/7/30 22:49:27
更多请点击:
https://kaifayun.com
第一章:AI代码架构评审的核心价值与时代必要性 在大模型驱动的软件开发范式加速演进的今天,AI生成代码已深度融入研发流水线——从GitHub Copilot辅助补全,到Cursor全自动函数生成,…
📅 2026/7/30 22:49:27
《落实算法安全主体责任基本情况》撰写重难点(算法备案专用,适配网信办审核标准)这份文件是备案三大核心材料之一,审核底层逻辑:证明企业有人管事、有制度流程、有技术手段、出事能处置;高频驳回原因普遍为…
📅 2026/7/30 22:49:26
做岩土设计的兄弟,是不是每次听到客户问“geo5 模块多少钱”心里就咯噔一下?怕报高了丢单子,报低了自己亏本。这篇不跟你扯虚的,直接告诉你怎么算这笔账,怎么跟老板或客户解释清楚这钱花在哪,让你下次面对询价不再心慌。记得去年有个做基坑支护的小团队找我,老板拿着个E…
📅 2026/7/30 22:48:37
本文关键词:geo2是共价化合物哎,说实话,每次看到化学题里那些弯弯绕绕的电子式,我就头大。特别是遇到那种非要让你判断是离子还是共价的,心里就发毛。今天咱不整那些虚头巴脑的定义,就聊聊二氧化硅,也就是大家常说的硅石、石英,很多人会误写成geo2,虽然化学式不对,但…
📅 2026/7/30 0:00:24
B4557 [GESP202606 四级] 扫雷 https://www.luogu.com.cn/problem/B4557 中国计算机学会(CCF)2026年6月C四级讲解——扫雷 https://www.bilibili.com/video/BV1MCMg6AEXR/ B4557 [GESP202606 四级] 扫雷 https://www.bilibili.com/video/BV1ZKTj6ZEVh/ 2…
📅 2026/7/30 0:00:26
Windows驱动存储终极清理工具:DriverStoreExplorer完全指南 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer
您是否曾因Windows系统盘空间不足而烦恼?是否遇到过设…
📅 2026/7/30 0:00:26
更多请点击:
https://codechina.net
第一章:AI帮助理解数学概念 人工智能正以前所未有的方式重塑数学学习的路径。通过自然语言处理与符号计算的深度融合,AI不仅能解析抽象定义,还能将定理、证明和几何直觉转化为可交互、可验证的…
📅 2026/7/30 1:16:07
1. 项目背景与核心价值去年参与的一个短剧项目让我深刻体会到传统创作流程的痛点:编剧团队花了三周打磨剧本,角色设计反复修改了七版,最后成片时又因为演员档期问题不得不临时调整分镜。这种低效的创作模式在快节奏的内容行业越来越难以为继。…
📅 2026/7/30 1:16:07
remix-i18next TypeScript类型安全实践:确保翻译键与类型定义同步 【免费下载链接】remix-i18next The easiest way to translate your React Router framework mode apps 项目地址: https://gitcode.com/gh_mirrors/re/remix-i18next
在开发多语言应用时&am…
📅 2026/7/30 1:16:07
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/30 7:16:27
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/30 17:17:14
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/30 5:16:22