详细讲解Python遍历目录的文件夹(dir)、文件(file)的三种方法:os.listdir、os.walk和os.scandir 您所在的位置:网站首页 获取文件夹下的所有文件名称的命令 详细讲解Python遍历目录的文件夹(dir)、文件(file)的三种方法:os.listdir、os.walk和os.scandir

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

2024-06-27 05:29| 来源: 网络整理| 查看: 265

在使用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 os def 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 os paths = 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 os paths = 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 os def 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_2 files: ./test/file_1.txt

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

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

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



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有