os.walk()函数
os.walk()用类似于深度遍历的方式遍历文件夹中的子文件夹以及文件。最基本的显示方式为(root_path,[file_dirs],[files]),比如文件夹dirty中有两个子文件夹toner、dirty以及一些图片文件,那么第一层显示方式为(~/dirty,[toner/dirty],[image1、image2、imag3…]),第二层显示方式为(~/dirty/toner,[],[image1,image2,image3…])、(~/dirty/dirty,[],[image1,image2,image3…])
下文将用代码详细解析这个函数
import os
image_path = '/home/yqw/Project/yt-image-classify/Picture/training20180501/dirty'
for x in os.walk(image_path):
print(x)
可以看到os.walk()以元组为单位区分每一层的,每一层又分成三个部分根目录路径、本目录中文件夹名字、本目录中文件名字。第一层的目录是”~/dirty’,第一层中的文件夹有toner,dirty,然后遍历第二层,可以发现第二层的第一个文件夹目录’~/dirty/toner’此目录中没有子文件夹,第二个文件夹目录为’~/dirty/dirty’。
当然也可以把os.walk()的三个元素分开,代码如下
import os
image_path = '/home/yqw/Project/yt-image-classify/Picture/training20180501/dirty'
for root, dirs, files in os.walk(image_path):
print("root:"+root)
print(dirs)
print(files)
可以看到遍历三次,每次三个元素root、dirs、files
遍历文件的例子
import os
image_path = '/home/yqw/Project/yt-image-classify/Picture/training20180501/dirty'
root = [x[0] for x in os.walk(image_path)]
dirs = [x[1] for x in os.walk(image_path)]
images = [x[2] for x in os.walk(image_path)]
# 遍历所有文件,因为images是一个嵌套list
def printList(list1):
for elements in list1:
if isinstance(elements, list) or isinstance(elements, tuple):
printList(elements) # 递归调用函数本身进行深层次的遍历
elif isinstance(elements, dict):
for i in elements.items():
print(i)
else:
print(elements)