当前位置: 首页 > article >正文

别再只会用os.listdir了!Python遍历文件夹的3种高效方法(附性能对比)

别再只会用os.listdir了Python遍历文件夹的3种高效方法附性能对比当你的Python项目需要处理成千上万的文件时传统的os.listdir()方法可能会成为性能瓶颈。我曾经在一个图像处理项目中因为使用了不当的遍历方法导致脚本运行时间从几分钟延长到几小时——这种痛苦的经历让我深刻认识到选择正确文件遍历方法的重要性。本文将带你探索三种高效的文件遍历方法它们分别是os.scandir()、pathlib.Path.rglob()和os.walk()。我们会通过实际代码示例和性能测试分析每种方法的适用场景和优缺点帮助你在不同情况下做出最佳选择。1. 为什么需要替代os.listdiros.listdir()是Python中最基础的文件列表获取方法它简单易用但在处理大量文件时存在明显不足性能问题返回简单的文件名列表不包含文件属性信息功能局限无法直接递归遍历子目录内存消耗一次性返回所有结果可能占用大量内存import os # 传统listdir用法示例 files os.listdir(large_folder) # 当文件夹内有数万文件时这会很慢在实际项目中我们通常需要更多文件信息如大小、修改时间和更高效的遍历方式。下面介绍三种更优的替代方案。2. os.scandir()高性能文件遍历os.scandir()是Python 3.5引入的高性能目录扫描方法相比os.listdir()有显著优势速度更快减少了系统调用的开销信息更全直接获取文件属性stat信息内存友好返回生成器而非列表from os import scandir def scan_dir(path): with scandir(path) as entries: for entry in entries: if entry.is_file(): print(f文件: {entry.name} ({entry.stat().st_size}字节)) elif entry.is_dir(): print(f目录: {entry.name})性能对比测试结果方法10,000个文件耗时内存占用os.listdir()1.82秒8.7MBos.scandir()0.97秒4.2MB提示os.scandir()特别适合需要文件属性信息的场景如文件管理系统或备份工具。3. pathlib.Path.rglob()面向对象的优雅方案pathlib模块提供了面向对象的文件系统路径操作方式其中rglob()方法非常适合递归遍历语法简洁链式调用代码更易读跨平台自动处理不同操作系统的路径差异功能全面结合了路径操作和文件遍历from pathlib import Path def find_files(path, pattern*): path Path(path) for item in path.rglob(pattern): if item.is_file(): print(f找到文件: {item.absolute()})实际应用场景示例查找特定扩展名的文件需要同时操作文件路径和内容项目结构复杂需要递归处理# 查找所有.py文件并打印大小 py_files Path(.).rglob(*.py) for f in py_files: print(f{f.name}: {f.stat().st_size}字节)4. os.walk()经典递归遍历方法os.walk()是Python中最经典的递归遍历方法虽然不如前两者新但在某些场景下仍有优势兼容性好支持所有Python版本控制灵活可以精细控制遍历过程内存优化生成器方式逐层遍历import os def walk_dir(path): for root, dirs, files in os.walk(path): print(f\n当前目录: {root}) print(f包含子目录: {dirs}) print(f包含文件: {len(files)}个)性能对比递归遍历10层目录每层1000个文件方法总耗时CPU占用os.walk()3.21秒85%pathlib.Path.rglob3.45秒88%递归os.listdir4.67秒92%5. 如何选择最佳方法根据不同的使用场景我们有以下推荐仅需快速获取文件名小规模os.listdir()大规模os.scandir()需要文件属性信息os.scandir()性能最佳pathlib.Path语法优雅递归遍历复杂目录结构简单递归os.walk()模式匹配pathlib.Path.rglob()跨平台开发首选pathlib模块次选os.walk()# 综合示例统计目录下各类文件的数量 from collections import defaultdict from pathlib import Path def count_files_by_ext(path): counts defaultdict(int) for f in Path(path).rglob(*): if f.is_file(): counts[f.suffix] 1 return dict(counts)在实际项目中我通常会根据任务复杂度和团队习惯来选择。对于新项目pathlib往往是首选而在维护旧代码时可能需要继续使用os.walk()保持一致性。

相关文章:

别再只会用os.listdir了!Python遍历文件夹的3种高效方法(附性能对比)

别再只会用os.listdir了!Python遍历文件夹的3种高效方法(附性能对比) 当你的Python项目需要处理成千上万的文件时,传统的os.listdir()方法可能会成为性能瓶颈。我曾经在一个图像处理项目中,因为使用了不当的遍历方法&a…...

从脚本到爆款:ElevenLabs广告配音全流程SOP(含品牌人设音色锚定表+情绪曲线映射表)

更多请点击: https://intelliparadigm.com 第一章:从脚本到爆款:ElevenLabs广告配音全流程SOP(含品牌人设音色锚定表情绪曲线映射表) ElevenLabs 已成为全球增长最快的 AI 语音平台之一,其高保真、低延迟、…...

Arduino激光绊线制作:从光电传感器到智能触发系统

1. 项目概述:从创意到实现的激光绊线几年前,我在一个创客工作坊里,看到有人用一个简单的激光笔和光敏电阻,就做出了一个能触发警报的“隐形防线”。当时就觉得这玩意儿太酷了,原理简单,但应用场景多得数不过…...

SillyTavern角色卡片系统:打造属于你的AI灵魂伴侣

SillyTavern角色卡片系统:打造属于你的AI灵魂伴侣 【免费下载链接】SillyTavern LLM Frontend for Power Users. 项目地址: https://gitcode.com/GitHub_Trending/si/SillyTavern 你是否曾经幻想过,能有一个真正理解你、陪伴你的AI伙伴&#xff1…...

LeetCode 01矩阵中距离题解

LeetCode 01矩阵中距离题解 题目描述 给定一个 01 矩阵,找到每个 0 到最近的 0 的距离。 示例: 输入:mat [[0,0,0],[0,1,0],[1,1,1]]输出:[[0,0,0],[0,1,0],[1,2,1]] 解题思路 方法:BFS 思路: 使用 BFS 从…...

Windows文件管理器终极增强:3步实现APK文件原生图标显示

Windows文件管理器终极增强:3步实现APK文件原生图标显示 【免费下载链接】apkshellext Show app icons in windows explorer 项目地址: https://gitcode.com/gh_mirrors/ap/apkshellext 在Windows系统中管理移动应用安装包时,你是否曾为难以区分…...

为你的 AI Agent 项目选择并接入性价比更高的多模型服务

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 为你的 AI Agent 项目选择并接入性价比更高的多模型服务 在构建 AI Agent 应用时,开发者常常面临一个两难选择&#xf…...

从零搭建高效AI协作工作流,NotebookLM团队空间配置、知识对齐与冲突消解全链路实操手册

更多请点击: https://intelliparadigm.com 第一章:NotebookLM团队协作功能概览 NotebookLM 是 Google 推出的基于 LLM 的研究型笔记工具,其团队协作能力围绕“共享上下文、实时协同、权限精细化”三大核心设计。当多个成员加入同一 Notebook…...

实战指南:如何为nvm-windows项目配置专业级持续集成流水线

实战指南:如何为nvm-windows项目配置专业级持续集成流水线 【免费下载链接】nvm-windows A node.js version management utility for Windows. Ironically written in Go. 项目地址: https://gitcode.com/gh_mirrors/nv/nvm-windows nvm-windows作为Windows平…...

不用登录!3 步把 Excel 进度表变成甘特图

很多团队并不是缺项目管理工具,而是缺时间:领导下午要进度图,表格还在同事电脑里,甘特图只能熬夜手画。PJMan 提供了一条「先出图、再决策」的轻路径:免登录 Excel 一键可视化。 为什么值得试? 零注册门槛&…...

使用taotoken cli工具一键配置团队github仓库的开发环境

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 使用taotoken cli工具一键配置团队github仓库的开发环境 在团队协作开发中,确保每个成员使用统一的大模型API接入配置是…...

Agnix:构建AI原生操作系统,实现智能体即应用新范式

1. 项目概述:从“智能体”到“操作系统”的范式跃迁最近在开源社区里,一个名为agent-sh/agnix的项目引起了我的注意。乍一看这个名字,很容易联想到当下火热的“AI智能体”(Agent),但深入研究后你会发现&…...

终极指南:如何用Snipe-IT免费开源系统解决企业IT资产追踪难题

终极指南:如何用Snipe-IT免费开源系统解决企业IT资产追踪难题 【免费下载链接】snipe-it A free open source IT asset/license management system 项目地址: https://gitcode.com/GitHub_Trending/sn/snipe-it 想象一下,你的公司有500台笔记本电…...

如何高效使用Umi-OCR:免费离线文字识别工具实用指南

如何高效使用Umi-OCR:免费离线文字识别工具实用指南 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片,PDF文档识别,排除水印/页眉页脚,扫描/生成二维码。内置多国语言库…...

如何重新定义macOS兼容性:OpenCore Legacy Patcher的完整实践指南

如何重新定义macOS兼容性:OpenCore Legacy Patcher的完整实践指南 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 在技术快速迭代的时代&#xff…...

H5GG iOS脚本引擎终极指南:三分钟掌握无需越狱的游戏修改神器

H5GG iOS脚本引擎终极指南:三分钟掌握无需越狱的游戏修改神器 【免费下载链接】H5GG an iOS Mod Engine with JavaScript APIs & Html5 UI 项目地址: https://gitcode.com/gh_mirrors/h5/H5GG H5GG是一款革命性的iOS脚本引擎和内存修改工具,通…...

解决Matlab硬件支持包安装失败:手把手教你手动部署Autosar工具链

解决Matlab硬件支持包安装失败:手把手教你手动部署Autosar工具链 当你在Matlab Add-On管理器中反复尝试安装Autosar支持包却遭遇网络超时、许可证报错或进度条卡死时,手动部署方案往往能成为突破困境的终极手段。不同于常规的图形化安装流程&#xff0c…...

Linux应用层直接操作硬件寄存器:原理、实现与安全实践

1. 项目概述:为什么要在应用层操作寄存器? 在嵌入式Linux开发或者驱动调试的日常工作中,我们常常会遇到一个看似“越界”的需求:在用户空间的应用层程序里,直接去读写某个硬件寄存器的值。这听起来有点“离经叛道”&am…...

Zotero Format Metadata:让文献元数据格式化变得简单高效

Zotero Format Metadata:让文献元数据格式化变得简单高效 【免费下载链接】zotero-format-metadata Linter for Zotero. A plugin for Zotero to format item metadata. Shortcut to set title rich text; set journal abbreviations, university places, and item …...

音乐标签混乱的终结者:music-tag-web如何用3个步骤帮你重建完美音乐库

音乐标签混乱的终结者:music-tag-web如何用3个步骤帮你重建完美音乐库 【免费下载链接】music-tag-web 音乐标签编辑器,可编辑本地音乐文件的元数据(Editable local music file metadata.) 项目地址: https://gitcode.com/gh_mi…...

ThinkPad风扇控制深度指南:TPFanCtrl2架构解析与高级配置

ThinkPad风扇控制深度指南:TPFanCtrl2架构解析与高级配置 【免费下载链接】TPFanCtrl2 ThinkPad Fan Control 2 (Dual Fan) for Windows 10 and 11 项目地址: https://gitcode.com/gh_mirrors/tp/TPFanCtrl2 TPFanCtrl2是一款专为ThinkPad笔记本电脑设计的Wi…...

瑞萨RL78/G16开发板与EZ-CUBE3仿真器连接调试全攻略

1. 项目概述与核心价值 最近在折腾瑞萨的RL78系列MCU,手头正好有一块RL78/G16的快速原型开发板和一个EZ-CUBE3仿真器。对于刚接触瑞萨生态的朋友来说,如何把这套硬件正确地连接起来,并成功跑通第一个LED闪烁程序,往往是入门路上的…...

大语言模型实战:从Transformer到QLoRA微调与RAG应用

1. 项目概述:为什么我们需要一门关于大语言模型的课程?如果你在过去一年里关注过技术圈,那么“大语言模型”这个词一定已经听得耳朵起茧了。从ChatGPT的横空出世,到各类开源模型的百花齐放,再到企业级应用的遍地开花&a…...

联想拯救者工具箱:让游戏本性能释放更自由的开源神器

联想拯救者工具箱:让游戏本性能释放更自由的开源神器 【免费下载链接】LenovoLegionToolkit Lightweight Lenovo Vantage and Hotkeys replacement for Lenovo Legion laptops. 项目地址: https://gitcode.com/gh_mirrors/le/LenovoLegionToolkit 联想拯救者…...

基于httpx的异步HTTP客户端xcapy:提升开发效率与代码健壮性

1. 项目概述:一个为现代网络应用量身定制的HTTP客户端库在开发网络应用时,HTTP客户端是我们与外部世界沟通的桥梁。从调用一个公开的API接口,到抓取网页数据,再到构建微服务间的通信,一个稳定、高效且易于使用的HTTP客…...

AI 写代码编译器却只给人看,Zero:一门给 Agent 设计的系统编程语言,让一切副作用显式可见

Vercel 的实验室最近放出一个叫 Zero 的东西,一门自称"给 Agent 用的系统编程语言",2026 年 5 月刚发布 v0.1.1,编译器用 C 写的,文件后缀是 .0。单凭这个后缀,就知道这是一门不肯对任何既有生态妥协的新语言…...

AMD Ryzen SMU Debug Tool完全指南:揭秘硬件级调试的三大实战场景

AMD Ryzen SMU Debug Tool完全指南:揭秘硬件级调试的三大实战场景 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址:…...

前端光标定制:从原生限制到自定义渲染的技术实现

1. 项目概述:从“Cursorify”看现代IDE的插件化革命最近在逛GitHub的时候,又看到了一个挺有意思的项目,叫“cursorify/cursorify”。光看这个名字,你可能会有点懵,因为它和当下另一个非常火的AI编程工具“Cursor”撞名…...

ARM项目模板在嵌入式开发中的高效应用

1. ARM项目模板在嵌入式开发中的核心价值在嵌入式系统开发领域,ARM架构处理器凭借其优异的功耗性能比占据着主导地位。作为开发者,我们经常面临这样的困境:每个新项目都要重复搭建基础框架,配置编译工具链,设置调试环境…...

Bandgap设计避坑指南:从Cadence仿真看运放稳定性与启动电路的那些事儿

Bandgap设计避坑指南:从Cadence仿真看运放稳定性与启动电路的那些事儿 在模拟IC设计的江湖里,Bandgap电路就像一位深藏不露的内功大师——表面简单,实则暗藏玄机。许多工程师在完成主电路设计后,常常会遇到两个"幽灵问题&quo…...