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 10 Python
动感网页相册 python编写简单文件夹内图片浏览工具
Aug 17 Python
详解Python 数据库 (sqlite3)应用
Dec 07 Python
python与php实现分割文件代码
Mar 06 Python
Python实现类似比特币的加密货币区块链的创建与交易实例
Mar 20 Python
使用anaconda的pip安装第三方python包的操作步骤
Jun 11 Python
Python基本socket通信控制操作示例
Jan 30 Python
python+mysql实现教务管理系统
Feb 20 Python
Django项目使用CircleCI的方法示例
Jul 14 Python
python内存监控工具memory_profiler和guppy的用法详解
Jul 29 Python
Django中自定义模型管理器(Manager)及方法
Sep 23 Python
python装饰器的特性原理详解
Dec 25 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
用PHP来计算某个目录大小的方法
2014/04/01 PHP
ThinkPHP之import方法实例详解
2014/06/20 PHP
基于PHP如何把汉字转化为拼音
2015/12/11 PHP
PHP实现批量上传单个文件
2015/12/29 PHP
关于php开启错误提示的总结
2019/09/24 PHP
农历与西历对照
2006/09/06 Javascript
Js 获取HTML DOM节点元素的方法小结
2009/04/24 Javascript
使用jQuery和PHP实现类似360功能开关效果
2014/02/12 Javascript
js闭包的用途详解
2014/11/09 Javascript
jQuery幻灯片带缩略图轮播效果代码分享
2015/08/17 Javascript
js 颜色选择插件
2017/01/23 Javascript
JS字符串按逗号和回车分隔的方法
2017/04/25 Javascript
老生常谈js数据类型
2017/08/03 Javascript
jquery实现楼层滚动效果
2018/01/01 jQuery
web前端页面生成exe可执行文件的方法
2018/02/08 Javascript
JavaScript递归函数定义与用法实例分析
2019/01/24 Javascript
vue input标签通用指令校验的实现
2019/11/05 Javascript
python抓取网页中的图片示例
2014/02/28 Python
pyqt4教程之实现windows窗口小示例分享
2014/03/07 Python
从零学python系列之浅谈pickle模块封装和拆封数据对象的方法
2014/05/23 Python
python实现单线程多任务非阻塞TCP服务端
2017/06/13 Python
python利用lxml读写xml格式的文件
2017/08/10 Python
我就是这样学习Python中的列表
2019/06/02 Python
python 判断linux进程,并杀死进程的实现方法
2019/07/01 Python
python 五子棋如何获得鼠标点击坐标
2019/11/04 Python
Django如何批量创建Model
2020/09/01 Python
使用Python快速打开一个百万行级别的超大Excel文件的方法
2021/03/02 Python
联想墨西哥官方网站:Lenovo墨西哥
2016/08/17 全球购物
英国床垫和床架购物网站:Bedman
2019/11/04 全球购物
C# Debug和Testing相关面试题
2015/10/25 面试题
数控机械专业个人的自我评价
2014/01/02 职场文书
英文演讲稿开场白
2014/08/25 职场文书
医院领导班子整改方案
2014/10/01 职场文书
初中思想品德教学反思
2016/02/24 职场文书
CSS SandBox应用场景及常见问题
2022/06/25 HTML / CSS