详细讲解Python遍历目录的文件夹(dir)、文件(file)的三种方法:os.listdir、os.walk和os.scandir
在使用Python开发项目的时候,会遇到需要遍历文件夹、文件的需求,我整理了三种主流方法:os.listdir
、os.walk
和os.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相关推荐
- attrib批量显示文件夹_电脑中病毒,文件夹全部变成快捷方式?3种方法轻松解决!...
原标题:电脑中病毒,文件夹全部变成快捷方式?3种方法轻松解决! 最近有位朋友去打印店的时候,u盘一不小心就带回了1KB快捷方式病毒,导致电脑u盘里的文件以及文件夹全部变成了快捷方式,不知道如何解决. ...
- C#获取文件的Content-Type(MIME Type)的三种方法
什么是ContentType? 我们知道浏览器可以处理各种各样的内容,比如:HTML.XML.JPG.Flash等等,那么浏览器是如何区分它们的呢?答案就是MIME Type,即资源的媒体类型.媒体类 ...
- PDF文件如何转JPG图片?三种方法教你快速转换
PDF文件是我们经常用来处理工作的一种文件形式,它的体积很小,不仅占用储存空间很少,而且传输起来也非常方便,但是有时候我们也会根据工作需求来将PDF文件转换成其他类型的文件,为了浏览起来更方便,我们也 ...
- python读取文件夹下所有文件的名字_一键汇总同一文件夹下所有表格,三种小技巧分享给你...
日常工作中我们经常会遇到多表合并的情况,手动粘贴复制过于麻烦,而且容易出错,今天分享三种汇总小技巧. 方法一 Windows批处理命令 如果需要汇总的表格是CSV格式(如下图所示,表格后缀为csv), ...
- Linux查看文件夹大小和文件大小的几种方法
文章目录 查看文件夹大小 du命令(推荐使用) ls命令 查看文件大小 du命令(推荐使用) ls命令 stat命令 wc命令 总结 查看文件夹大小 du命令(推荐使用) Summarize disk ...
- win10运行在哪里_不会win10文件夹同步?教你两种方法
本文介绍了两种win10文件夹同步的方法,分别是系统自带的功能和傲梅轻松备份软件中的文件同步功能.各有各的优势,那么接下来我们就一起看看分别如何操作. 学会win10文件夹同步,工作效率更高数据更安全 ...
- win10运行在哪里_win10文件夹同步,教你2种方法
本文介绍了两种win10文件夹同步的方法,分别是系统自带的功能和傲梅轻松备份软件中的文件同步功能.各有各的优势,那么接下来我们就一起看看分别如何操作. 学会win10文件夹同步,工作效率更高数据更安全 ...
- exxi6.7如何传文件到win7_Win7文件误删如何恢复?这三种方法请收好
小白系统 免费的智能客服 点击使用 使用电脑时,由于操作速度太快,总是会有手抖意外删除文件的情况.那么如何恢复Win7意外删除的文件?实际上,有很多恢复方法.我将在这里为您介绍3种常见的解决方案.希望 ...
- VS2017 C++ 在主源文件中调用其他源文件的三种方法以及命名空间的使用方法
一. #include "A.h" ,不通过静态库 (1)打开VS2017,新建一个名为project空项目: (2)新建一个A.h头文件,声明类.函数和变量,代码如下: #pra ...
最新文章
- asp编程工具_使用ASP.NET Core构建RESTful API的技术指南
- 【渝粤题库】国家开放大学2021春1253C语言程序设计题目
- python测试c语言代码_numpy C语言源代码调试(一)
- pandas.Series.asfreq
- PostgreSQL 最佳实践 - 在线增量备份与任意时间点恢复
- 什么情况下使用 if()后面的else可以省略不写
- 通俗理解同步IO\异步IO
- ShadowGun 体积光学习
- 目前最新android处理器排行榜,手机处理器最新排行榜天梯图_现在安卓手机的处理器哪个比较好...
- Telink BLE MESH开发|ble mesh开发教程《四》telink_sig_mesh休眠与唤醒
- 高性能零售IT系统的建设05-从0打造一个每秒万级并发的互联网交易系统的技术全架构
- php给图片添加水印图片,PHP实现给图片添加文字水印
- 数据包络分析--SBM模型(第一篇)
- C语言 由拼音字串获取拼音数量
- 幂果支招:哪里找免费的Mac版音频剪辑软件
- 常见的关系型数据库和非关系型数据库区别
- 边缘设备、系统及计算杂谈(18)——Meteor JS学习
- string刷题集合
- Error querying database. Cause: java.sql.SQLException:
- 计算机主板 安装系统,技嘉GA-B150M-D3V主板u盘重装系统win10步骤