Python利用递归和walk()遍历目录文件的方法示例
前言 经常需要检查一个“目录或文件夹”内部有没有我们想要的文件或者文件夹,就需要我们循环迭代出所有文件和子文件夹,Python中遍历指定目录下所有的文件和文件夹,包含多级目录,有两种方法,一种是通过递归思想去遍历,另一种是os模块的walk()函数下面话不多说,就来一起看看详细的介绍: 列出目录结构 一.递归方法 #coding:utf-8 import os allfile=[] def getallfile(path): allfilelist=os.listdir(path) for file in allfilelist: filepath=os.path.join(path,file) #判断是不是文件夹 if os.path.isdir(filepath): getallfile(filepath) allfile.append(filepath) return allfile if __name__ == '__main__': path="C:UserszsPycharmProjectsdemo" allfiles=getallfile(path) for item in allfiles: print item #结果 C:UserszsPycharmProjectsdemo.ideademo.iml C:UserszsPycharmProjectsdemo.ideaencodings.xml C:UserszsPycharmProjectsdemo.ideamisc.xml C:UserszsPycharmProjectsdemo.ideamodules.xml C:UserszsPycharmProjectsdemo.ideaworkspace.xml C:UserszsPycharmProjectsdemo.idea C:UserszsPycharmProjectsdemofunctiondemo.py C:UserszsPycharmProjectsdemoindex.py C:UserszsPycharmProjectsdemolocaleen_USLC_MESSAGESdjango.po C:UserszsPycharmProjectsdemolocaleen_USLC_MESSAGES C:UserszsPycharmProjectsdemolocaleen_US C:UserszsPycharmProjectsdemolocalezh_CNLC_MESSAGESlang.mo C:UserszsPycharmProjectsdemolocalezh_CNLC_MESSAGESlang.po C:UserszsPycharmProjectsdemolocalezh_CNLC_MESSAGES C:UserszsPycharmProjectsdemolocalezh_CN C:UserszsPycharmProjectsdemolocale C:UserszsPycharmProjectsdemoname.txt C:UserszsPycharmProjectsdemotext.txt 借用递归的思想去列出所有文件夹中的内容,判断如果是目录就继续调用本身的方法。 二.os模块的walk()函数
返回一个3个元素的元祖,(dirpath,dirnames,filenames),
参数一:top C 根目录下的每一个文件夹(包含它自己),产生3-元组 (dirpath,filenames)【文件夹路径,文件夹名字,文件名】。 参数二:topdown C可选,为True或者没有指定,一个目录的的3-元组将比它的任何子文件夹的3-元组先产生 (目录自上而下)。如果topdown为 False,一个目录的3-元组将比它的任何子文件夹的3-元组后产生 (目录自下而上)。 参数三:onerror C 可选,是一个函数; 它调用时有一个参数,一个OSError实例。报告这错误后,继续walk,或者抛出exception终止walk。 参数四:followlinks C 设置为 true,则通过软链接访问目录。 #coding:utf-8 import os def getallfiles(path): allfile=[] for dirpath,filenames in os.walk(path): for dir in dirnames: allfile.append(os.path.join(dirpath,dir)) for name in filenames: allfile.append(os.path.join(dirpath,name)) return allfile if __name__ == '__main__': path = "C:UserszsPycharmProjectsdemo" allfile=getallfiles(path) for file in allfile: print file #输出结果 C:UserszsPycharmProjectsdemo.idea C:UserszsPycharmProjectsdemolocale C:UserszsPycharmProjectsdemofunctiondemo.py C:UserszsPycharmProjectsdemoindex.py C:UserszsPycharmProjectsdemoname.txt C:UserszsPycharmProjectsdemotext.txt C:UserszsPycharmProjectsdemo.ideademo.iml C:UserszsPycharmProjectsdemo.ideaencodings.xml C:UserszsPycharmProjectsdemo.ideamisc.xml C:UserszsPycharmProjectsdemo.ideamodules.xml C:UserszsPycharmProjectsdemo.ideaworkspace.xml C:UserszsPycharmProjectsdemolocaleen_US C:UserszsPycharmProjectsdemolocalezh_CN C:UserszsPycharmProjectsdemolocaleen_USLC_MESSAGES C:UserszsPycharmProjectsdemolocaleen_USLC_MESSAGESdjango.po C:UserszsPycharmProjectsdemolocalezh_CNLC_MESSAGES C:UserszsPycharmProjectsdemolocalezh_CNLC_MESSAGESlang.mo C:UserszsPycharmProjectsdemolocalezh_CNLC_MESSAGESlang.po 小结 两种方法输入结果是一样的。但是在输入的顺序有差异。对比感觉python的os模块的walk()方法比较简单 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对编程小技巧的支持。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |