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中functools模块的常用函数解析
Jun 30 Python
python绘制双柱形图代码实例
Dec 14 Python
Python3 中把txt数据文件读入到矩阵中的方法
Apr 27 Python
python框架中flask知识点总结
Aug 17 Python
Python Flask 搭建微信小程序后台详解
May 06 Python
python3 selenium自动化测试 强大的CSS定位方法
Aug 23 Python
python 使用pygame工具包实现贪吃蛇游戏(多彩版)
Oct 30 Python
opencv python Canny边缘提取实现过程解析
Feb 03 Python
python使用OpenCV模块实现图像的融合示例代码
Apr 10 Python
django 解决自定义序列化返回处理数据为null的问题
May 20 Python
python利用线程实现多任务
Sep 18 Python
使用python将HTML转换为PDF pdfkit包(wkhtmltopdf) 的使用方法
Apr 21 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
Discuz! 5.0.0论坛程序中加入一段js代码,让会员点击下载附件前自动弹出提示窗口
2007/04/18 PHP
PHP实现的多彩标签效果代码分享
2014/08/21 PHP
php自定义函数br2nl实现将html中br换行符转换为文本输入中换行符的方法【与函数nl2br功能相反】
2017/02/17 PHP
ExtJS 2.0实用简明教程 之Border区域布局
2009/04/29 Javascript
JavaScript 创建对象和构造类实现代码
2009/07/30 Javascript
Javascript 面向对象 继承
2010/05/13 Javascript
用javascript添加控件自定义属性解析
2013/11/25 Javascript
利用js正则表达式验证手机号,email地址,邮政编码
2014/01/23 Javascript
浅谈JavaScript的事件
2015/02/27 Javascript
JQuery 在文档中查找指定name的元素并移除的实现方法
2016/05/19 Javascript
js链表操作(实例讲解)
2017/08/29 Javascript
详解如何使用webpack打包JS
2018/06/21 Javascript
vue前端框架—Mint UI详解(更适用于移动端)
2019/04/30 Javascript
vue-router源码之history类的浅析
2019/05/21 Javascript
javascript设计模式之迭代器模式
2020/01/30 Javascript
JavaScript内置对象之Array的使用小结
2020/05/12 Javascript
[03:17]2014DOTA2 国际邀请赛中国区预选赛 四强专访
2014/05/23 DOTA
[51:26]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#3Secret VS OG第二局
2016/03/03 DOTA
整理Python最基本的操作字典的方法
2015/04/24 Python
python实现连接mongodb的方法
2015/05/08 Python
python复制文件到指定目录的实例
2018/04/27 Python
python将处理好的图像保存到指定目录下的方法
2019/01/10 Python
基于python计算滚动方差(标准差)talib和pd.rolling函数差异详解
2020/06/08 Python
python实现邮件循环自动发件功能
2020/09/11 Python
Python使用struct处理二进制(pack和unpack用法)
2020/11/12 Python
css3实现书本翻页效果的示例代码
2021/03/08 HTML / CSS
Html5元素及基本语法详解
2016/08/02 HTML / CSS
美国汽配连锁巨头Pep Boys官网:轮胎更换、汽车维修服务和汽车零部件
2017/01/14 全球购物
交通专业个人自荐信格式
2013/09/23 职场文书
综合办公室主任职责
2013/12/16 职场文书
餐厅总经理岗位职责
2013/12/31 职场文书
音乐学专业求职信
2014/07/22 职场文书
人口与计划生育目标管理责任书
2014/07/29 职场文书
2015年出纳个人工作总结
2015/04/02 职场文书
初中语文教学随笔
2015/08/15 职场文书
redis 存储对象的方法对比分析
2021/08/02 Redis