如何用os库的os.walk实现目录遍历?
摘要:Python os库 os.walk使用(详细教程、带实践)
os.walk 处理文件
os.walk原理
Python os库 os.walk使用(详细教程、带实践)
-----------------------PS:env python version==3.10----------------
简介:
本文以实际案例说明os.walk对文件的使用方式。主要教学内容:
os.walk库实际的使用
os.walk最佳实践
(可选)os.walk原理
(可选)迭代器方向理解
全文2000字左右,代码字数800(含迭代器180)左右,建议学习时间10-15min(不含迭代器)。若学习迭代器建议30min+
1 模拟实际使用环境
PS:仅作为案例说明参考,若已有可用的文件夹/目录,请移步第二步
根据上图模拟实际使用情况:
随意新建一个目录(确保不会有其他文件)
在(新建目录的)根目录创建一个文件和文件夹(名称随意,也可以参照我的样例来)
进入root文件夹,新建两个次级文件夹(dir1、dir2)
root文件夹下直接创建次级目录文件F1.txt
创建次级目录文件dir1、dir2
进入dir2文件夹
创建文件(F2.txt)
2 解析os.walk函数
面向基础讲解,详细见 os.walk官方说明
什么是 python 的os库
本模块提供了一种使用与操作系统相关的功能的便捷式途径。(如文件路径控制、文件信息获取、遍历目录文件【os.walk】、其他系统调用功能)
os.walk函数讲解:
os.walk(top, topdown=True, onerror=None, followlinks=False)
主要聚焦于前两个参数即可:
top:根目录路径(str)
topdown:自上而下模式,默认(True)为自上而下遍历,False则从底向上遍历
返回值:
返回迭代器 ,迭代器每次生成的对象为:(dirpath, dirnames, filenames)
dirpath: 当前文件夹路径
dirnames:文件夹名称
filenames:文件名称
如果不理解迭代器,可以暂时理解为os.walk返回了 元组 (dirpath, dirnames, filenames)的列表,类似于下文 (省略双引号):
[
(C:/user/, [root],[rott_text.txt] ), #根目录
(C:/user/root, [dir1,dir2],[F1.txt] ), #进入root文件夹
(C:/user/root/dir1, [],[] ), #进入dir1文件夹
(C:/user/root/dir2, [],[F2.txt] ) #dir1中没有文件了,退回上一层级,进入dir2文件夹中
#读取所有文件/文件名完毕,
]
只不过他生成的特殊“列表”经常适用于for,不能直接作为列表打印,直接打印是这样子的:
#code
dir_path = r'your_dir' #替换为你的文件夹
dirpath, dirnames, filenames = os.walk(dir_path)
print(f'dir_path:{dirpath}\ndir_name:{dirnames}\nfile_names:{filenames}')
#result:
dirpath, dirnames, filenames = os.walk(dir_path)
ValueError: too many values to unpack (expected 3)
究其原因是返回的单个迭代器,并非三个列表元组,喜欢细究这部分的见后文,简要的话知道不能直接调用,一般结合for调用就好,这个并非深度挖掘,看完后面会看可能有更好的理解。
