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开发vim插件及心得分享
Nov 04 Python
Python科学计算之NumPy入门教程
Jan 15 Python
python使用Apriori算法进行关联性解析
Dec 21 Python
Python 利用scrapy爬虫通过短短50行代码下载整站短视频
Oct 29 Python
Python去除字符串前后空格的几种方法
Mar 04 Python
python如何制作缩略图
Apr 30 Python
Python实现带下标索引的遍历操作示例
May 30 Python
python中的列表与元组的使用
Aug 08 Python
浅谈对pytroch中torch.autograd.backward的思考
Dec 27 Python
python如何更新包
Jun 11 Python
python调用百度AI接口实现人流量统计
Feb 03 Python
Django + Taro 前后端分离项目实现企业微信登录功能
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
php+iframe 实现上传文件功能示例
2020/03/04 PHP
PhpStorm的使用教程(本地运行PHP+远程开发+快捷键)
2020/03/26 PHP
js中cookie的使用详细分析
2008/05/28 Javascript
js 判断 enter 事件
2009/02/12 Javascript
JS获取DropDownList的value值与text值的示例代码
2014/01/07 Javascript
jQuery实现新消息在网页标题闪烁提示
2015/06/23 Javascript
Angularjs实现多个页面共享数据的方式
2016/03/29 Javascript
jQuery实现下拉加载功能实例代码
2016/04/01 Javascript
JavaScript-html标题滚动效果的简单实现
2016/09/08 Javascript
JavaScript中的await/async的作用和用法
2016/10/31 Javascript
js数组与字符串常用方法总结
2017/01/13 Javascript
简单实现jQuery上传图片显示预览功能
2020/06/29 jQuery
详解使用Visual Studio Code对Node.js进行断点调试
2017/09/14 Javascript
three.js中文文档学习之如何本地运行详解
2017/11/20 Javascript
React中使用UEditor百度富文本的方法
2018/08/22 Javascript
浅谈KOA2 Restful方式路由初探
2019/03/14 Javascript
浅谈监听单选框radio改变事件(和layui中单选按钮改变事件)
2019/09/10 Javascript
JS实现transform实现扇子效果
2020/01/17 Javascript
vue数据更新UI不刷新显示的解决办法
2020/08/06 Javascript
Python中实现字符串类型与字典类型相互转换的方法
2014/08/18 Python
Python实现数据库并行读取和写入实例
2017/06/09 Python
在pytorch中为Module和Tensor指定GPU的例子
2019/08/19 Python
keras CNN卷积核可视化,热度图教程
2020/06/22 Python
Python实现对word文档添加密码去除密码的示例代码
2020/12/29 Python
html5使用canvas绘制太阳系效果
2014/12/15 HTML / CSS
html5实现滑块功能之type="range"属性
2020/02/18 HTML / CSS
Raffaello Network德国:意大利拉斐尔时尚购物网
2019/05/01 全球购物
法律专业实习鉴定
2013/12/22 职场文书
职业培训师职业生涯规划
2014/02/18 职场文书
运动员口号
2014/06/09 职场文书
2014最新房贷收入证明范本
2014/09/12 职场文书
乡领导班子四风问题对照检查材料
2014/09/25 职场文书
客服专员岗位职责范本
2015/04/07 职场文书
观看《信仰》心得体会
2016/01/15 职场文书
公文格式,规则明细(新手收藏)
2019/07/23 职场文书
2019年鼓励无偿献血倡议书
2019/09/17 职场文书