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抓取网页中的图片示例
Feb 28 Python
python实现数通设备端口监控示例
Apr 02 Python
Python使用random和tertools模块解一些经典概率问题
Jan 28 Python
Python中文件I/O高效操作处理的技巧分享
Feb 04 Python
使用Turtle画正螺旋线的方法
Sep 22 Python
PyQt5每天必学之事件与信号
Apr 20 Python
python对list中的每个元素进行某种操作的方法
Jun 29 Python
使用python写的opencv实时监测和解析二维码和条形码
Aug 14 Python
关于python中plt.hist参数的使用详解
Nov 28 Python
python 判断txt每行内容中是否包含子串并重新写入保存的实例
Mar 12 Python
Python实现石头剪刀布游戏
Jan 20 Python
Python机器学习实战之k-近邻算法的实现
Nov 27 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
asp和php下textarea提交大量数据发生丢失的解决方法
2008/01/20 PHP
深入探讨<br />和 \r\n两者有什么区别??
2013/06/05 PHP
php5.3不能连接mssql数据库的解决方法
2014/12/27 PHP
PHP使用array_fill定义多维数组的方法
2015/03/18 PHP
PHP进行批量任务处理不超时的解决方法
2016/07/11 PHP
Yii+MYSQL锁表防止并发情况下重复数据的方法
2016/07/14 PHP
Thinkphp5 如何隐藏入口文件index.php(URL重写)
2019/10/16 PHP
dojo 之基础篇(二)之从服务器读取数据
2007/03/24 Javascript
excel操作之Add Data to a Spreadsheet Cell
2007/06/12 Javascript
javascript实现的鼠标链接提示效果生成器代码
2007/06/28 Javascript
jQuery Tools tooltip使用说明
2012/07/14 Javascript
屏蔽网页右键复制和ctrl+c复制的js代码
2013/01/04 Javascript
JS、jquery实现几分钟前、几小时前、几天前等时间差显示效果的代码实例分享
2014/04/11 Javascript
jQuery中clone()方法用法实例
2015/01/16 Javascript
有关JavaScript中call()和apply() 的一些理解
2016/05/20 Javascript
jquery UI Datepicker时间控件冲突问题解决
2016/12/16 Javascript
vuejs2.0运用原生js实现简单的拖拽元素功能示例
2017/02/24 Javascript
使用 jQuery 实现表单验证功能
2017/07/05 jQuery
layui获取多选框中的值方法
2018/08/15 Javascript
vue项目中在可编辑div光标位置插入内容的实现代码
2020/01/07 Javascript
[13:56]DAC2018 4.5SOLO赛决赛 MidOne vs Paparazi第一场
2018/04/06 DOTA
Python下的twisted框架入门指引
2015/04/15 Python
python实现获取Ip归属地等信息
2016/08/27 Python
详解Python中的文件操作
2016/08/28 Python
http请求 request失败自动重新尝试代码示例
2018/01/25 Python
python字符串替换re.sub()方法解析
2019/09/18 Python
python生成requirements.txt的两种方法
2019/09/18 Python
Python多线程模块Threading用法示例小结
2019/11/09 Python
Django 解决distinct无法去除重复数据的问题
2020/05/20 Python
python selenium xpath定位操作
2020/09/01 Python
python绘制分布折线图的示例
2020/09/24 Python
python输出国际象棋棋盘的实例分享
2020/11/26 Python
激情洋溢的毕业生就业求职信
2014/03/15 职场文书
终止合同协议书
2014/04/17 职场文书
行风评议整改报告
2014/11/06 职场文书
教你快速构建一个基于nginx的web集群项目
2021/11/27 Servers