Python利用递归和walk()遍历目录文件的方法示例


Posted in Python onJuly 14, 2017

前言

经常需要检查一个“目录或文件夹”内部有没有我们想要的文件或者文件夹,就需要我们循环迭代出所有文件和子文件夹,Python中遍历指定目录下所有的文件和文件夹,包含多级目录,有两种方法,一种是通过递归思想去遍历,另一种是os模块的walk()函数下面话不多说,就来一起看看详细的介绍:

列出目录结构

Python利用递归和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()方法比较简单

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
Python脚本判断 Linux 是否运行在虚拟机上
Apr 25 Python
在Python的web框架中中编写日志列表的教程
Apr 30 Python
在python的类中动态添加属性与生成对象
Sep 17 Python
Python实现读取json文件到excel表
Nov 18 Python
Python中时间datetime的处理与转换用法总结
Feb 18 Python
python机器人运动范围问题的解答
Apr 29 Python
Python while循环使用else语句代码实例
Feb 07 Python
Python中常用的高阶函数实例详解
Feb 21 Python
Python爬虫设置ip代理过程解析
Jul 20 Python
使用Python操作MySQL的小技巧
Sep 10 Python
python小技巧——将变量保存在本地及读取
Nov 13 Python
Python爬取你好李焕英豆瓣短评生成词云的示例代码
Feb 24 Python
Python学习教程之常用的内置函数大全
Jul 14 #Python
python与C互相调用的方法详解
Jul 14 #Python
Python django实现简单的邮件系统发送邮件功能
Jul 14 #Python
使用Django Form解决表单数据无法动态刷新的两种方法
Jul 14 #Python
Python md5与sha1加密算法用法分析
Jul 14 #Python
Python自动化开发学习之三级菜单制作
Jul 14 #Python
python实现杨辉三角思路
Jul 14 #Python
You might like
PHP.MVC的模板标签系统(五)
2006/09/05 PHP
destoon后台网站设置变成空白的解决方法
2014/06/21 PHP
php中实现xml与mysql数据相互转换的方法
2014/12/25 PHP
php实现curl模拟ftp上传的方法
2015/07/29 PHP
实例简介PHP的一些高级面向对象编程的特性
2015/11/27 PHP
PHP入门教程之正则表达式基本用法实例详解(正则匹配,搜索,分割等)
2016/09/11 PHP
thinkphp5.1框架模板布局与模板继承用法分析
2019/07/19 PHP
csdn 博客中实现运行代码功能实现
2009/08/29 Javascript
js 多种变量定义(对象直接量,数组直接量和函数直接量)
2010/05/24 Javascript
网页禁用右键菜单和鼠标拖动选择方法小结
2015/02/25 Javascript
JS实现根据用户输入分钟进行倒计时功能
2016/11/14 Javascript
完美实现js选项卡切换效果(二)
2017/03/08 Javascript
angular动态删除ng-repaeat添加的dom节点的方法
2017/07/20 Javascript
利用nginx + node在阿里云部署https的步骤详解
2017/12/19 Javascript
node.js中express模块创建服务器和http模块客户端发请求
2019/03/06 Javascript
vue百度地图 + 定位的详解
2019/05/13 Javascript
python下MySQLdb用法实例分析
2015/06/08 Python
浅谈Python生成器generator之next和send的运行流程(详解)
2017/05/08 Python
python实现将excel文件转化成CSV格式
2018/03/22 Python
Tensorflow 实现释放内存
2020/02/03 Python
Window版下在Jupyter中编写TensorFlow的环境搭建
2020/04/10 Python
Python用dilb提取照片上人脸的示例
2020/10/26 Python
详解移动端HTML5页面端去掉input输入框的白色背景和边框(兼容Android和ios)
2016/12/15 HTML / CSS
钉钉企业内部H5微应用开发详解
2020/05/12 HTML / CSS
HomeAway英国:全球领先的度假租赁在线市场
2020/02/03 全球购物
食品厂厂长岗位职责
2014/01/30 职场文书
《美丽的南沙群岛》教学反思
2014/04/27 职场文书
生物科学专业毕业生求职信
2014/06/02 职场文书
企业公益活动策划方案
2014/08/24 职场文书
法人授权委托书样本
2014/09/19 职场文书
拾金不昧通报表扬范文
2015/05/05 职场文书
医院病假条范文
2015/08/17 职场文书
医院病假条怎么写
2015/08/17 职场文书
2019下半年英语教师的教学工作计划(3篇)
2019/09/25 职场文书
教你使用pyinstaller打包Python教程
2021/05/27 Python
java设计模式--建造者模式详解
2021/07/21 Java/Android