这里有新鲜出炉的Python入门,程序狗速度看过来!
Python 是一种面向对象、解释型计算机程序设计语言,由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年。Python语法简洁而清晰,具有丰富和强大的类库。它常被昵称为胶水语言,它能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。
在日常开发中经常需要检查一个“目录或文件夹”内部有没有我们想要的文件或者文件夹,下面这篇文章主要给大家介绍了关于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:\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),
参数一: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()方法比较简单
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对PHPERZ的支持。
来源: http://www.phperz.com/article/17/1027/351204.html