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 Socket编程入门教程
Jul 11 Python
使用Python读写文本文件及编写简单的文本编辑器
Mar 11 Python
Python读csv文件去掉一列后再写入新的文件实例
Dec 28 Python
Python基于socket模块实现UDP通信功能示例
Apr 10 Python
基于python中theano库的线性回归
Aug 31 Python
Python3.5基础之函数的定义与使用实例详解【参数、作用域、递归、重载等】
Apr 26 Python
使用Python做垃圾分类的原理及实例代码附源码
Jul 02 Python
Python安装及Pycharm安装使用教程图解
Sep 20 Python
pytorch多GPU并行运算的实现
Sep 27 Python
Python文本处理简单易懂方法解析
Dec 19 Python
keras的load_model实现加载含有参数的自定义模型
Jun 22 Python
Python 使用dict实现switch的操作
Apr 07 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
Laravel 添加多语言提示信息的方法
2019/09/29 PHP
tp5.0框架隐藏index.php入口文件及模块和控制器的方法分析
2020/02/11 PHP
js中的escape及unescape函数的php实现代码
2007/09/04 Javascript
jQuery.each()用法分享
2012/07/31 Javascript
不使用浏览器运行javascript代码的方法
2013/07/24 Javascript
jquery获取颜色在ie和ff下的区别示例介绍
2014/03/28 Javascript
jquery缓动swing liner控制动画过程不同时刻的速度
2014/05/29 Javascript
javascript拖拽效果延伸学习
2016/04/04 Javascript
Augularjs-起步详解
2016/07/08 Javascript
基于jQuery实现Tabs选项卡自定义插件
2016/11/21 Javascript
Bootstrap 填充Json数据的实例代码
2017/01/11 Javascript
VUE 更好的 ajax 上传处理 axios.js实现代码
2017/05/10 Javascript
67 个节约开发时间的前端开发者的工具、库和资源
2017/09/12 Javascript
基于Vue 服务端Cookies删除的问题
2018/09/21 Javascript
layui加载表格,绑定新增,编辑删除,查看按钮事件的例子
2019/09/06 Javascript
JavaScript中的this妙用实例分析
2020/05/09 Javascript
el-form 多层级表单的实现示例
2020/09/10 Javascript
python发送邮件接收邮件示例分享
2014/01/21 Python
python中pygame模块用法实例
2014/10/09 Python
在Python的gevent框架下执行异步的Solr查询的教程
2015/04/16 Python
Python实现ssh批量登录并执行命令
2016/10/25 Python
matplotlib绘制符合论文要求的图片实例(必看篇)
2017/06/02 Python
Python程序退出方式小结
2017/12/09 Python
在windows下Python打印彩色字体的方法
2018/05/15 Python
对python Tkinter Text的用法详解
2018/10/11 Python
Python一个简单的通信程序(客户端 服务器)
2019/03/06 Python
在python中实现同行输入/接收多个数据的示例
2019/07/20 Python
Python如何爬取51cto数据并存入MySQL
2020/08/25 Python
银行实习推荐信
2015/03/27 职场文书
张思德观后感
2015/06/09 职场文书
JS实现扫雷项目总结
2021/05/19 Javascript
JS代码编译器Monaco使用方法
2021/06/11 Javascript
JavaWeb 入门篇:创建Web项目,Idea配置tomcat
2021/07/16 Java/Android
基于MySql验证的vsftpd虚拟用户
2021/11/07 MySQL
windows server 2012安装FTP并配置被动模式指定开放端口
2022/06/10 Servers
pandas中pd.groupby()的用法详解
2022/06/16 Python