在使用Python开发项目的时候,会遇到需要遍历文件夹、文件的需求,我整理了三种主流方法:os.listdiros.walkos.scandir,并进行了详细的讲解。

用于实验的目录:

.test
├── dir_1
│   ├── dir_1_file_1.txt
│   ├── dir_1_file_2.txt
│   ├── dir_1_file_3.txt
│   └── sub_dir_1
│       └── sub_file_1.txt
├── dir_2
│   └── dir_2_file_1.txt
├── dir_3
└── file_1.txt

os.listdir 简单暴力

os.listdir(path),返回path目录下的文件夹和文件,但不包含子文件夹里的文件夹和文件,并按照目录树结构的排序输出结果,即深度优先。

递归遍历所有文件,代码实例:

import osdef recursive_listdir(path):files = os.listdir(path)for file in files:file_path = os.path.join(path, file)if os.path.isfile(file_path):print(file)elif os.path.isdir(file_path):recursive_listdir(file_path)recursive_listdir(r'./test')

输出结果:

dir_1_file_2.txt
dir_1_file_1.txt
dir_1_file_3.txt
sub_file_1.txt
file_1.txt
dir_2_file_1.txt

os.walk 优雅

os.walk(top, topdown=True, onerror=None, followlinks=False),通过“自上而下”或“自下而上”来遍历目录,生成目录树中的文件夹名和文件名。

  • top:根目录下的每一个文件夹(包含它自己)
  • topdown:可选,为True时,则自上而下,而为False时,则自下而上
  • onerror:可选,是一个函数,OSError实例
  • followlinks:可选,通过软链接访问目录

同时,结果是按照广度优先返回的,有三个结果,分布是文件夹路径、文件夹名称和文件名。

显示所有子目录,代码实例:

import ospaths = os.walk(r'./test')for path, dir_lst, file_lst in paths:for dir_name in dir_lst:print(os.path.join(path, dir_name))

输出结果:

./test/dir_1
./test/dir_3
./test/dir_2
./test/dir_1/sub_dir_1

显示目录下所有文件,代码实例:

import ospaths = os.walk(r'./test')for path, dir_lst, file_lst in paths:for file_name in file_lst:print(os.path.join(path, file_name))

输出结果:

./test/file_1.txt
./test/dir_1/dir_1_file_2.txt
./test/dir_1/dir_1_file_1.txt
./test/dir_1/dir_1_file_3.txt
./test/dir_1/sub_dir_1/sub_file_1.txt
./test/dir_2/dir_2_file_1.txt

os.scandir 高效

os.scandir(path),返回path目录树中对应的os.DirEntry对象的迭代器(文件夹或文件),不包含子文件夹里的文件夹和文件,但运行效率比os.walk高,Python官方推荐使用os.scandir来遍历目录树。

遍历目录树,代码实例:

import osdef traversal_files(path):for item in os.scandir(path):if item.is_dir():dirs.append(item.path)elif item.is_file():files.append(item.path)print('dirs:')print('\n'.join(dirs))print()print('files:')print('\n'.join(files))traversal_files(r'./test')

输出结果:

dirs:
./test/dir_1
./test/dir_3
./test/dir_2files:
./test/file_1.txt

最后,安利大家一本书《深入理解NLP的中文分词:从原理到实践》,让你从零掌握中文分词技术,踏入NLP的大门。

如果因为以上内容对你有所帮助,希望你能帮个忙,点个赞、评个论、转个发,关个注。

此公众号每周分享一篇干货文章,实实在在把一个课题说明白,讲清楚,望关注!

详细讲解Python遍历目录的文件夹(dir)、文件(file)的三种方法:os.listdir、os.walk和os.scandir相关推荐

  1. attrib批量显示文件夹_电脑中病毒,文件夹全部变成快捷方式?3种方法轻松解决!...

    原标题:电脑中病毒,文件夹全部变成快捷方式?3种方法轻松解决! 最近有位朋友去打印店的时候,u盘一不小心就带回了1KB快捷方式病毒,导致电脑u盘里的文件以及文件夹全部变成了快捷方式,不知道如何解决. ...

  2. C#获取文件的Content-Type(MIME Type)的三种方法

    什么是ContentType? 我们知道浏览器可以处理各种各样的内容,比如:HTML.XML.JPG.Flash等等,那么浏览器是如何区分它们的呢?答案就是MIME Type,即资源的媒体类型.媒体类 ...

  3. PDF文件如何转JPG图片?三种方法教你快速转换

    PDF文件是我们经常用来处理工作的一种文件形式,它的体积很小,不仅占用储存空间很少,而且传输起来也非常方便,但是有时候我们也会根据工作需求来将PDF文件转换成其他类型的文件,为了浏览起来更方便,我们也 ...

  4. python读取文件夹下所有文件的名字_一键汇总同一文件夹下所有表格,三种小技巧分享给你...

    日常工作中我们经常会遇到多表合并的情况,手动粘贴复制过于麻烦,而且容易出错,今天分享三种汇总小技巧. 方法一 Windows批处理命令 如果需要汇总的表格是CSV格式(如下图所示,表格后缀为csv), ...

  5. Linux查看文件夹大小和文件大小的几种方法

    文章目录 查看文件夹大小 du命令(推荐使用) ls命令 查看文件大小 du命令(推荐使用) ls命令 stat命令 wc命令 总结 查看文件夹大小 du命令(推荐使用) Summarize disk ...

  6. win10运行在哪里_不会win10文件夹同步?教你两种方法

    本文介绍了两种win10文件夹同步的方法,分别是系统自带的功能和傲梅轻松备份软件中的文件同步功能.各有各的优势,那么接下来我们就一起看看分别如何操作. 学会win10文件夹同步,工作效率更高数据更安全 ...

  7. win10运行在哪里_win10文件夹同步,教你2种方法

    本文介绍了两种win10文件夹同步的方法,分别是系统自带的功能和傲梅轻松备份软件中的文件同步功能.各有各的优势,那么接下来我们就一起看看分别如何操作. 学会win10文件夹同步,工作效率更高数据更安全 ...

  8. exxi6.7如何传文件到win7_Win7文件误删如何恢复?这三种方法请收好

    小白系统 免费的智能客服 点击使用 使用电脑时,由于操作速度太快,总是会有手抖意外删除文件的情况.那么如何恢复Win7意外删除的文件?实际上,有很多恢复方法.我将在这里为您介绍3种常见的解决方案.希望 ...

  9. VS2017 C++ 在主源文件中调用其他源文件的三种方法以及命名空间的使用方法

    一. #include "A.h" ,不通过静态库 (1)打开VS2017,新建一个名为project空项目: (2)新建一个A.h头文件,声明类.函数和变量,代码如下: #pra ...

最新文章

  1. asp编程工具_使用ASP.NET Core构建RESTful API的技术指南
  2. 【渝粤题库】国家开放大学2021春1253C语言程序设计题目
  3. python测试c语言代码_numpy C语言源代码调试(一)
  4. pandas.Series.asfreq
  5. PostgreSQL 最佳实践 - 在线增量备份与任意时间点恢复
  6. 什么情况下使用 if()后面的else可以省略不写
  7. 通俗理解同步IO\异步IO
  8. ShadowGun 体积光学习
  9. 目前最新android处理器排行榜,手机处理器最新排行榜天梯图_现在安卓手机的处理器哪个比较好...
  10. Telink BLE MESH开发|ble mesh开发教程《四》telink_sig_mesh休眠与唤醒
  11. 高性能零售IT系统的建设05-从0打造一个每秒万级并发的互联网交易系统的技术全架构
  12. php给图片添加水印图片,PHP实现给图片添加文字水印
  13. 数据包络分析--SBM模型(第一篇)
  14. C语言 由拼音字串获取拼音数量
  15. 幂果支招:哪里找免费的Mac版音频剪辑软件
  16. 常见的关系型数据库和非关系型数据库区别
  17. 边缘设备、系统及计算杂谈(18)——Meteor JS学习
  18. string刷题集合
  19. Error querying database. Cause: java.sql.SQLException:
  20. 计算机主板 安装系统,技嘉GA-B150M-D3V主板u盘重装系统win10步骤

热门文章

  1. aixcoder邀请码
  2. linux 默认时区修改
  3. datastage dsjob命令
  4. c语言2逻辑与2是1吗,2.C语言逻辑运算符和表达式
  5. 树莓派呼吸灯python代码
  6. Orica 如何维护安全、质量、管理风险、高标准的客户服务和员工福利所需的大量文档和内容
  7. OpenWrt下使用iperf测试多跳网络性能
  8. 2020年超级计算机排名,2020中国高性能计算机TOP100榜单正式发布
  9. [Java] 什么是IoC?什么是DI?它们的区别是什么?
  10. java jdbc 是什么意思_java中的jdbc是什么,