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网络编程学习笔记(八):XML生成与解析(DOM、ElementTree)
Jun 09 Python
再谈Python中的字符串与字符编码(推荐)
Dec 14 Python
Python实现树莓派WiFi断线自动重连的实例代码
Mar 16 Python
对Python协程之异步同步的区别详解
Feb 19 Python
Python脚本按照当前日期创建多级目录
Mar 01 Python
使用Filter过滤python中的日志输出的实现方法
Jul 17 Python
Python企业编码生成系统总体系统设计概述
Jul 26 Python
Python类中的魔法方法之 __slots__原理解析
Aug 26 Python
python3实现用turtle模块画一棵随机樱花树
Nov 21 Python
python GUI模拟实现计算器
Jun 22 Python
基于Pytorch版yolov5的滑块验证码破解思路详解
Feb 25 Python
python识别围棋定位棋盘位置
Jul 26 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
我的论坛源代码(十)
2006/10/09 PHP
解析yii数据库的增删查改
2013/06/20 PHP
php实现的SESSION类
2014/12/02 PHP
phalcon框架使用指南
2016/02/23 PHP
浅谈PHP的数据库接口和技术
2016/12/09 PHP
浅谈laravel-admin form中的数据,在提交后,保存前,获取并进行编辑
2019/10/21 PHP
MooTools 1.2介绍
2009/09/14 Javascript
Confirmer JQuery确认对话框组件
2010/06/09 Javascript
Javascript异步编程的4种方法让你写出更出色的程序
2013/01/17 Javascript
开发 Internet Explorer 右键功能表(ContextMenu)
2013/07/03 Javascript
js控制容器隐藏出现防止样式变化的两种方法
2014/04/25 Javascript
JQuery替换DOM节点的方法
2015/06/11 Javascript
jQuery编程中的一些核心方法简介
2015/08/14 Javascript
Angular 常用指令实例总结整理
2016/12/13 Javascript
JS去除字符串中空格的方法
2017/02/14 Javascript
Three.js加载外部模型的教程详解
2017/11/10 Javascript
JavaScript"模拟事件"的注意要点详解
2019/02/13 Javascript
Vue多组件仓库开发与发布详解
2019/02/28 Javascript
JavaScript this使用方法图解
2020/02/04 Javascript
uniapp,微信小程序中使用 MQTT的问题
2020/07/11 Javascript
返回上一个url并刷新界面的js代码
2020/09/12 Javascript
原生js实现无缝轮播图效果
2021/01/28 Javascript
详解Python的Django框架中的通用视图
2015/05/04 Python
Python中for循环控制语句用法实例
2015/06/02 Python
详解Python Socket网络编程
2016/01/05 Python
在Pycharm中将pyinstaller加入External Tools的方法
2019/01/16 Python
python3编写ThinkPHP命令执行Getshell的方法
2019/02/26 Python
10分钟教你用python动画演示深度优先算法搜寻逃出迷宫的路径
2019/08/12 Python
对Python获取屏幕截图的4种方法详解
2019/08/27 Python
Python计算两个矩形重合面积代码实例
2019/09/16 Python
利用pyshp包给shapefile文件添加字段的实例
2019/12/06 Python
基于python plotly交互式图表大全
2019/12/07 Python
Django 再谈一谈json序列化
2020/03/16 Python
如何理解python中数字列表
2020/05/29 Python
大学军训的体会
2014/11/08 职场文书
Python实现批量自动整理文件
2022/03/16 Python