1. 简介
遍历一个目录下所有的文件夹和文件是非常有用的事情,在python中os模块提供了非常简单易行的遍历方法os.walk(path)。
另外一定要了解的一点是,os.walk(path)遍历有点“广度优先”的意思,也就是说在上一个os.walk没执行完之前,再运行os.walk会等待。
2. 实例
先看代码,注意ShowPathInfo函数是对一个目录进行处理,对该目录下的文件夹同样会递归调用ShowPathInfo,注意 print("*****")输出的时机表明了os.walk等待执行的特点。
#目录的遍历 #导入os模块 import os #获取目录信息 print("请输入目录信息") dir=input() while os.path.exists(dir)==False: print("目录不存在,请重新输入") dir=input() #对一个目录的处理函数 def ShowPathInfo(path): print("*****") for folder,subFolders,files in os.walk(path): print("\n==当前遍历目录:"+folder) for file in files: print("[文件]:"+file) for subFolder in subFolders: print("[文件夹]:"+subFolder) ShowPathInfo(subFolder) #主程序 print("==========遍历开始") ShowPathInfo(dir) print("==========遍历结束")
测试,根据****输出时机,看os.walk运行方式
请输入目录信息 C:\Users ==========遍历开始 ***** ==当前遍历目录:C:\Users [文件]:desktop.ini [文件夹]:Administrator ***** [文件夹]:All Users ***** [文件夹]:Classic .NET AppPool ***** [文件夹]:Default ***** [文件夹]:Default User ***** [文件夹]:DefaultAppPool ***** [文件夹]:Public ***** ==当前遍历目录:C:\Users\Administrator [文件]:.deliverycenter.installs [文件]:.packettracer [文件]:a.py [文件]:mm.cfg [文件]:NTUSER.DAT [文件]:ntuser.dat.LOG1 [文件]:ntuser.dat.LOG2 [文件]:NTUSER.DAT{016888bd-6c6f-11de-8d1d-001e0bcde3ec}.TM.blf [文件]:NTUSER.DAT{016888bd-6c6f-11de-8d1d-001e0bcde3ec}.TMContainer00000000000000000001.regtrans-ms [文件]:NTUSER.DAT{016888bd-6c6f-11de-8d1d-001e0bcde3ec}.TMContainer00000000000000000002.regtrans-ms [文件]:ntuser.ini [文件]:ntuser.pol [文件]:pdf.exe [文件]:WebpageIcons.db [文件夹]:.android ***** [文件夹]:.eclipse ***** [文件夹]:.idlerc ***** [文件夹]:.IntelliJIdea2016.3 ***** [文件夹]:.m2 ***** [文件夹]:.p2 ***** [文件夹]:.VirtualBox ***** [文件夹]:AppData ***** [文件夹]:Application Data ***** [文件夹]:Cisco Packet Tracer 6.0