失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 详细讲解Python遍历目录的文件夹(dir) 文件(file)的三种方法:os.listdir os.walk和os.scandir

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

时间:2020-06-11 00:36:51

相关推荐

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

在使用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.txtdir_1_file_1.txtdir_1_file_3.txtsub_file_1.txtfile_1.txtdir_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》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。