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实现的各种排序算法代码
Mar 04 Python
Python与Redis的连接教程
Apr 22 Python
构建Python包的五个简单准则简介
Jun 15 Python
Python可变参数函数用法实例
Jul 07 Python
Python提取网页中超链接的方法
Sep 18 Python
解决pyqt中ui编译成窗体.py中文乱码的问题
Dec 23 Python
利用python画一颗心的方法示例
Jan 31 Python
python初学之用户登录的实现过程(实例讲解)
Dec 23 Python
pycharm 主题theme设置调整仿sublime的方法
May 23 Python
Django接收自定义http header过程详解
Aug 23 Python
PyQt5中向单元格添加控件的方法示例
Mar 24 Python
Python制作表白爱心合集
Jan 22 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基础学习之流程控制的实现分析
2013/04/28 PHP
Yii框架表单提交验证功能分析
2017/01/07 PHP
PHP实现APP微信支付的实例讲解
2018/02/10 PHP
thinkphp中U方法按路由规则生成url的方法
2018/03/12 PHP
jquery 元素控制(追加元素/追加内容)介绍及应用
2013/04/21 Javascript
php与js的区别是什么
2013/08/05 Javascript
jquery实现的鼠标拖动排序Li或Table
2014/05/04 Javascript
Jquery基础教程之DOM操作
2015/08/19 Javascript
5个最顶级jQuery图表类库插件【jquery插件库】
2016/05/05 Javascript
Node.js创建Web、TCP服务器
2017/12/05 Javascript
Bootstrap popover 实现鼠标移入移除显示隐藏功能方法
2018/01/24 Javascript
JavaScript正则表达式函数总结(常用)
2018/02/22 Javascript
React Form组件的实现封装杂谈
2018/05/07 Javascript
详解在create-react-app使用less与antd按需加载
2018/12/06 Javascript
使用70行Python代码实现一个递归下降解析器的教程
2015/04/17 Python
python3编码问题汇总
2016/09/06 Python
Python爬虫包 BeautifulSoup  递归抓取实例详解
2017/01/28 Python
Python实现的快速排序算法详解
2017/08/01 Python
如何高效使用Python字典的方法详解
2017/08/31 Python
python爬虫基本知识
2018/03/05 Python
实践Vim配置python开发环境
2018/07/02 Python
django 消息框架 message使用详解
2019/07/22 Python
tensorflow tf.train.batch之数据批量读取方式
2020/01/20 Python
Tkinter中复选菜单是否被选中的判断与设置方式
2020/03/04 Python
Python开发企业微信机器人每天定时发消息实例
2020/03/17 Python
新加坡航空官方网站:Singapore Airlines
2016/10/13 全球购物
Vans英国官方网站:美国南加州的原创极限运动潮牌
2017/01/20 全球购物
Watchshop德国:欧洲在线手表No.1
2019/06/20 全球购物
Lookfantastic澳大利亚官网:英国知名美妆购物网站
2021/01/07 全球购物
农行实习自我鉴定
2013/09/22 职场文书
我的五年职业生涯规划
2014/01/23 职场文书
战友聚会策划方案
2014/06/13 职场文书
领导批评与自我批评范文
2014/10/16 职场文书
电影建党伟业观后感
2015/06/01 职场文书
合同审查法律意见书
2015/06/04 职场文书
Redis数据同步之redis shake的实现方法
2022/04/21 Redis