前言
经常需要检查一个“目录或文件夹”内部有没有我们想要的文件或者文件夹,就需要我们循环迭代出所有文件和子文件夹,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:\Users\zs\PycharmProjects\demo" allfiles=getallfile(path) for item in allfiles: print item #结果 C:\Users\zs\PycharmProjects\demo\.idea\demo.iml C:\Users\zs\PycharmProjects\demo\.idea\encodings.xml C:\Users\zs\PycharmProjects\demo\.idea\misc.xml C:\Users\zs\PycharmProjects\demo\.idea\modules.xml C:\Users\zs\PycharmProjects\demo\.idea\workspace.xml C:\Users\zs\PycharmProjects\demo\.idea C:\Users\zs\PycharmProjects\demo\functiondemo.py C:\Users\zs\PycharmProjects\demo\index.py C:\Users\zs\PycharmProjects\demo\locale\en_US\LC_MESSAGES\django.po C:\Users\zs\PycharmProjects\demo\locale\en_US\LC_MESSAGES C:\Users\zs\PycharmProjects\demo\locale\en_US C:\Users\zs\PycharmProjects\demo\locale\zh_CN\LC_MESSAGES\lang.mo C:\Users\zs\PycharmProjects\demo\locale\zh_CN\LC_MESSAGES\lang.po C:\Users\zs\PycharmProjects\demo\locale\zh_CN\LC_MESSAGES C:\Users\zs\PycharmProjects\demo\locale\zh_CN C:\Users\zs\PycharmProjects\demo\locale C:\Users\zs\PycharmProjects\demo\name.txt C:\Users\zs\PycharmProjects\demo\text.txt
借用递归的思想去列出所有文件夹中的内容,判断如果是目录就继续调用本身的方法。
二.os模块的walk()函数
os.walk(top, topdown=True, onerror=None, followlinks=False)
返回一个3个元素的元祖,(dirpath, dirnames, filenames),
- dirpath:要列出指定目录的路径
- dirnames:目录下的所有文件夹
- filenames:目录下的所有文件
参数一:top – 根目录下的每一个文件夹(包含它自己), 产生3-元组 (dirpath, dirnames, filenames)【文件夹路径, 文件夹名字, 文件名】。
参数二:topdown –可选,为True或者没有指定, 一个目录的的3-元组将比它的任何子文件夹的3-元组先产生 (目录自上而下)。如果topdown为 False, 一个目录的3-元组将比它的任何子文件夹的3-元组后产生 (目录自下而上)。
参数三:onerror – 可选,是一个函数; 它调用时有一个参数, 一个OSError实例。报告这错误后,继续walk,或者抛出exception终止walk。
参数四:followlinks – 设置为 true,则通过软链接访问目录。
#coding:utf-8 import os def getallfiles(path): allfile=[] for dirpath,dirnames,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:\Users\zs\PycharmProjects\demo" allfile=getallfiles(path) for file in allfile: print file #输出结果 C:\Users\zs\PycharmProjects\demo\.idea C:\Users\zs\PycharmProjects\demo\locale C:\Users\zs\PycharmProjects\demo\functiondemo.py C:\Users\zs\PycharmProjects\demo\index.py C:\Users\zs\PycharmProjects\demo\name.txt C:\Users\zs\PycharmProjects\demo\text.txt C:\Users\zs\PycharmProjects\demo\.idea\demo.iml C:\Users\zs\PycharmProjects\demo\.idea\encodings.xml C:\Users\zs\PycharmProjects\demo\.idea\misc.xml C:\Users\zs\PycharmProjects\demo\.idea\modules.xml C:\Users\zs\PycharmProjects\demo\.idea\workspace.xml C:\Users\zs\PycharmProjects\demo\locale\en_US C:\Users\zs\PycharmProjects\demo\locale\zh_CN C:\Users\zs\PycharmProjects\demo\locale\en_US\LC_MESSAGES C:\Users\zs\PycharmProjects\demo\locale\en_US\LC_MESSAGES\django.po C:\Users\zs\PycharmProjects\demo\locale\zh_CN\LC_MESSAGES C:\Users\zs\PycharmProjects\demo\locale\zh_CN\LC_MESSAGES\lang.mo C:\Users\zs\PycharmProjects\demo\locale\zh_CN\LC_MESSAGES\lang.po
小结
两种方法输入结果是一样的。但是在输入的顺序有差异。对比感觉python的os模块的walk()方法比较简单
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
更新日志
- 群星2013-青春缤纷辑压箱宝大公开3CD2[新加坡限量版][WAV整轨]
- 林育群.2013-BalladShow(日本版)【环球】【WAV+CUE】
- 陈加洛.1992-痛到感觉不到【宝丽金】【WAV+CUE】
- 群星.2023-宿命之敌电视剧原声带【韶愔音乐】【FLAC分轨】
- 東京事変-大発見[FLAC+CUE]
- 椎名林檎-三文ゴシップ[FLAC+CUE]
- 2024年08月04日
- 裘德《裘德「最后的水族馆」演唱会LIVE》[320K/MP3][228.89MB]
- 裘德《裘德「最后的水族馆」演唱会LIVE》[24bit 48kHz][FLAC/分轨][2.08G]
- 基因三重奏《如果你什么都不说 音乐会现场录音》[320K/MP3][145.37MB]
- 孟庭苇.1996-月亮说话(2020环球24KGOLD限量版)【上华】【WAV+CUE】
- 群星.1997-新艺宝优质音响系列·国语精选监听版【新艺宝】【WAV+CUE】
- 阿桑.2005-寂寞在唱歌(星外星引进版)【华研国际】【WAV+CUE】
- 基因三重奏《如果你什么都不说 音乐会现场录音》[FLAC/分轨][287.43MB]
- 蔡题谦《我爱你,却依然要看你走》[320K/MP3][88.65MB]