在python中,经常会遍历目录,经常会想到os.listdir()方法。
import os
os.listdir("path")
结果打印
当然我们发现当传入的目录下还有子目录时,该方法只能返回子目录名,而无法深度遍历子目录中的所有文件。
使用os.listdir()无法遍历到子目录中的文件。
为了解决上述问题,实现真正的深度遍历,本文将向你介绍同为Python os库中的另一个方法——os.walk()。
1.os.walk()使用方法介绍
1.1.语法
要使用os.walk()方法,我们首先需要导入Python的os库。
导入os库后,使用os.walk()方法的语法如下:
import os
os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])
os.walk()方法最主要的参数为 “top" ,也就是需要遍历的文件的路径,通常我们只需要使用这个参数就可以正常使用os.walk()方法了,即通过
os.walk(top)就可以快速地深度遍历指定文件夹。
1.2.参数详解
参数名 | 意义 |
---|---|
top | 所要遍历的目录的地址 |
topdown | 可选,为 True,则优先遍历 top 目录,否则优先遍历 top 的子目录(默认为True)。人话就是:如果为 True,先遍历top一级目录下的文件,然后再遍历一级目录中包含的子目录中的文件。 |
onerror | 可选,需要一个 callable 对象,当 walk 需要异常时,会调用。 |
followlinks | 可选,如果为 True,则会遍历目录下的快捷方式(Linux 下是软连接 symbolic link )实际所指的目录,如果为 False,则优先遍历 top 的子目录(默认False)。 |
1.3.返回值
通过使用isinstance()方法我们可以得知,os.walk()方法返回一个迭代器(Iterator) :
import os
from collections.abc import Iterator
isinstance(os.walk('.'),Iterator)
#输出;Ture
我们用实际代码演示下:
import os print(os.walk("."))
结果:
import os
print(list(os.walk(".")))
强制转换
使用循环返回结果
import os
print(list(os.walk(".")))
for root, dirs, files in os.walk(".",topdown=False):
for i in files:
print("文件:{}".format(os.path.join(root,i)))
for j in dirs:
print("文件夹:{}".format(os.path.join(root,j)))
结果:
这样就可以全部的去遍历了,目录也进行了深度的便利,打印出来当前的目录下面所有的文件和文件夹。
后记
发现问题,解决问题。遇到问题,慢慢解决问题即可。