新闻详情

新闻详情

首页 / 资讯中心 / 详情

Python3中列出目录的方法详解

发布时间:2026/9/30 13:25:00来源:尧图网络
Python3中列出目录的方法详解
1. 引言在日常的 Python 开发中我们经常需要遍历目录、查看目录下的文件列表或者递归地处理某个文件夹下的所有内容。无论是做文件管理工具、批量处理脚本还是构建自动化流程列出目录都是一项基础且高频的操作。2. 准备工作在开始之前请确保你的环境中已经安装了 Python3建议 3.6 及以上版本。本文所有示例均使用 Python 标准库无需安装任何第三方依赖。你可以通过以下命令检查 Python 版本python3--version本文的示例代码将围绕一个示例目录结构展开假设目录如下sample_dir/ ├── file1.txt ├── file2.py ├── sub_dir/ │ ├── inner_file.md │ └── another_dir/ │ └── deep_file.log └── notes/ └── readme.txt3. 使用 os.listdir() 列出目录os.listdir()是 Python 中最基础、最直接的列出目录方法。它接收一个路径字符串作为参数返回该目录下所有条目文件和子目录的名称列表。3.1 基本用法importos pathsample_direntriesos.listdir(path)print(entries)输出结果[file1.txt, file2.py, sub_dir, notes]3.2 过滤出文件或目录os.listdir()返回的结果不区分文件和目录我们可以结合os.path.isdir()或os.path.isfile()进行过滤importos pathsample_direntriesos.listdir(path)files[eforeinentriesifos.path.isfile(os.path.join(path,e))]dirs[eforeinentriesifos.path.isdir(os.path.join(path,e))]print(文件,files)print(目录,dirs)输出结果文件 [file1.txt, file2.py] 目录 [sub_dir, notes]3.3 优缺点优点简单直接性能好适合快速获取单层目录内容。缺点只返回名称不包含文件大小、修改时间等元数据不递归子目录。4. 使用 os.scandir() 高效遍历os.scandir()是 Python 3.5 引入的改进版目录遍历方法。它返回一个迭代器每个元素是一个DirEntry对象包含文件名以及文件类型等元数据避免了额外的系统调用性能优于os.listdir()os.path.isdir()的组合。4.1 基本用法importos pathsample_dirwithos.scandir(path)asentries:forentryinentries:print(entry.name)输出结果file1.txt file2.py sub_dir notes4.2 判断文件类型DirEntry对象提供了is_file()和is_dir()方法可以直接判断类型importos pathsample_dirwithos.scandir(path)asentries:forentryinentries:ifentry.is_file():print(f[文件]{entry.name})elifentry.is_dir():print(f[目录]{entry.name})输出结果[文件] file1.txt [文件] file2.py [目录] sub_dir [目录] notes4.3 优缺点优点性能高能直接获取文件类型和部分元数据推荐在需要遍历大量文件时使用。缺点返回的是迭代器需要配合with语句使用以释放资源。5. 使用 pathlib.Path.iterdir() 面向对象遍历pathlib是 Python 3.4 引入的面向对象文件路径库Path.iterdir()返回一个生成器逐个产出该目录下的Path对象。它让代码更简洁、可读性更高是 Python3 官方推荐的路径处理方式。5.1 基本用法frompathlibimportPath pathPath(sample_dir)forchildinpath.iterdir():print(child.name)输出结果file1.txt file2.py sub_dir notes5.2 过滤文件与目录Path对象自带is_file()和is_dir()方法配合列表推导式可以优雅地过滤frompathlibimportPath pathPath(sample_dir)files[p.nameforpinpath.iterdir()ifp.is_file()]dirs[p.nameforpinpath.iterdir()ifp.is_dir()]print(文件,files)print(目录,dirs)输出结果文件 [file1.txt, file2.py] 目录 [sub_dir, notes]5.3 优缺点优点代码简洁、面向对象、跨平台性好是 Python3 的推荐写法。缺点相比os.scandir()略慢但在绝大多数场景下性能差异可忽略。6. 使用 os.walk() 递归遍历目录树os.walk()用于递归遍历目录树它会自上而下或自下而上地生成一个三元组(dirpath, dirnames, filenames)分别表示当前目录路径、子目录列表、文件列表。这是处理嵌套目录结构时最常用的方法。6.1 基本用法importos rootsample_dirfordirpath,dirnames,filenamesinos.walk(root):print(f当前目录{dirpath})print(f 子目录{dirnames})print(f 文件{filenames})输出结果当前目录sample_dir 子目录[sub_dir, notes] 文件[file1.txt, file2.py] 当前目录sample_dir/sub_dir 子目录[another_dir] 文件[inner_file.md] 当前目录sample_dir/sub_dir/another_dir 子目录[] 文件[deep_file.log] 当前目录sample_dir/notes 子目录[] 文件[readme.txt]6.2 收集所有文件路径我们可以利用os.walk()递归收集所有文件的完整路径importos rootsample_dirall_files[]fordirpath,_,filenamesinos.walk(root):forfilenameinfilenames:all_files.append(os.path.join(dirpath,filename))forfinall_files:print(f)输出结果sample_dir/file1.txt sample_dir/file2.py sample_dir/sub_dir/inner_file.md sample_dir/sub_dir/another_dir/deep_file.log sample_dir/notes/readme.txt6.3 优缺点优点功能强大支持递归遍历可灵活控制遍历顺序和剪枝。缺点代码相对繁琐需要手动拼接路径。7. 使用 pathlib.Path.rglob() 递归匹配Path.rglob()是pathlib提供的递归通配符匹配方法可以按模式匹配目录树中的所有文件。它非常适合「查找特定类型文件」的场景。7.1 基本用法frompathlibimportPath rootPath(sample_dir)forpinroot.rglob(*):print(p)输出结果sample_dir/file1.txt sample_dir/file2.py sample_dir/sub_dir sample_dir/sub_dir/inner_file.md sample_dir/sub_dir/another_dir sample_dir/sub_dir/another_dir/deep_file.log sample_dir/notes sample_dir/notes/readme.txt7.2 按扩展名匹配文件frompathlibimportPath rootPath(sample_dir)forpinroot.rglob(*.txt):print(p)输出结果sample_dir/file1.txt sample_dir/notes/readme.txt7.3 优缺点优点语法简洁支持通配符模式匹配适合查找特定文件。缺点只返回匹配项不提供目录遍历的完整控制。8. 方法对比与选择建议下表总结了上述几种方法的适用场景方法是否递归返回内容推荐场景os.listdir()否名称列表快速获取单层目录内容os.scandir()否DirEntry对象大量文件遍历需要文件类型pathlib.Path.iterdir()否Path对象面向对象写法单层遍历os.walk()是目录树三元组递归处理整个目录树pathlib.Path.rglob()是Path对象按模式递归查找文件选择建议只需要单层文件名列表 →os.listdir()。需要高性能遍历且关心文件类型 →os.scandir()。追求代码简洁、面向对象 →pathlib.Path.iterdir()。需要递归处理所有子目录 →os.walk()。需要按通配符递归查找 →pathlib.Path.rglob()。9. 总结本文详细介绍了 Python3 中列出目录的 5 种常用方法从基础的os.listdir()到高效的os.scandir()再到面向对象的pathlib系列以及递归遍历的os.walk()和rglob()。每种方法都有其独特的适用场景你可以根据实际需求灵活选择。在实际开发中推荐优先使用pathlib模块它更符合 Python3 的现代编程风格代码也更易读、易维护。希望本文能帮助你更好地掌握 Python 目录操作提升开发效率。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

多孩家庭选车,丰田智能电混双擎的第三排空间够用吗? 2026/9/30 14:18:35

多孩家庭选车,丰田智能电混双擎的第三排空间够用吗?

多孩家庭看丰田智能电混双擎,第三排空间够不够用,不能只看“七座”这个标签。以皇冠陆放、格瑞维亚等一汽丰田HEV车型为例,第三排更适合中短途乘坐,能解决“偶尔多带一两个孩子”的问题;但如果家里经常需要六到七人满员…

阅读更多 →
Java入门笔记:从字面量、变量到基本数据类型,一篇文章带你吃透! 2026/9/30 14:18:28

Java入门笔记:从字面量、变量到基本数据类型,一篇文章带你吃透!

Java 入门笔记日期: 9.26 字面量 ---- 怎么写 变量 ---- 怎么存 运算符 ---- 怎么算 📖今日知识点 ——字面量类型 1、整数类型 — 直接写(18,-88) 2、小数类型 — 直接写,加上小数点 (…

阅读更多 →
03 ·纯 C11 在 MCU 上写 Transformer 推理:无 SIMD 的标量内核全解析 2026/9/30 14:18:14

03 ·纯 C11 在 MCU 上写 Transformer 推理:无 SIMD 的标量内核全解析

03 纯 C11 在 MCU 上写 Transformer 推理:无 SIMD 的标量内核全解析 English version: en/03-scalar-inference-kernel.md 本篇对应源码:main/kmcu.c main/kmcu.h main/main.c 目标:理解 kmcu.c/h 如何在一个 32 位 RISC-V MCU 上、用纯标…

阅读更多 →
第三篇 HTTP 请求解析状态机 2026/9/30 14:18:14

第三篇 HTTP 请求解析状态机

原项目:qinguoyi/TinyWebServer 复刻仓库:L2501031968/ccTinyWebServer 完整 20 章教程:仓库内 docs/TinyWebServer-Recreation.md 第 4 章 HTTP 请求解析状态机 4.1 本章目标 第 3 章已经能够通过 epoll 接收多个客户端连接,但…

阅读更多 →
手机号状态检测API:从空号、停机号到风险号的全面识别 2026/9/30 14:18:07

手机号状态检测API:从空号、停机号到风险号的全面识别

一、为什么要做手机号状态检测在用户触达的业务场景中,手机号的"有效性"是一个经常被忽略却直接影响 ROI 的环节。一个触达场景的完整链路是:获取手机号 → 发送消息/拨打语音 → 用户响应 → 转化。如果手机号本身就不可达(空号、…

阅读更多 →
25.58万的腾势Z9S给你百万豪华座驾体验 2026/9/30 14:17:53

25.58万的腾势Z9S给你百万豪华座驾体验

过去,大型豪华轿车的产品逻辑几乎围绕后排展开:加长轴距、舒适座椅、静谧座舱,驾驶者更像被服务的 "专职司机"。但二三十万价位的豪华车用户正在发生变化 —— 绝大多数时间由车主本人驾驶,在豪华体面之外,操…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉