收藏本站 收藏本站
积木网首页 - 软件测试 - 常用手册 - 站长工具 - 技术社区
首页 > python > 正文

首页 - PHP - 数据库 - 操作系统 - 游戏开发 - JS - Android - MySql - Redis - MongoDB - Win8 - Shell编程 - DOS命令 - jQuery - CSS样式 - Python - Perl

Access - Oracle - DB2 - SQLServer - MsSql2008 - MsSql2005 - Sqlite - PostgreSQL - node.js - extjs - JavaScript vbs - Powershell - Ruby

Python利用递归和walk()遍历目录文件的方法示例

前言

经常需要检查一个“目录或文件夹”内部有没有我们想要的文件或者文件夹,就需要我们循环迭代出所有文件和子文件夹,Python中遍历指定目录下所有的文件和文件夹,包含多级目录,有两种方法,一种是通过递归思想去遍历,另一种是os模块的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:UserszsPycharmProjectsdemo"
  allfiles=getallfile(path)

  for item in allfiles:
   print item


#结果
C:UserszsPycharmProjectsdemo.ideademo.iml
C:UserszsPycharmProjectsdemo.ideaencodings.xml
C:UserszsPycharmProjectsdemo.ideamisc.xml
C:UserszsPycharmProjectsdemo.ideamodules.xml
C:UserszsPycharmProjectsdemo.ideaworkspace.xml
C:UserszsPycharmProjectsdemo.idea
C:UserszsPycharmProjectsdemofunctiondemo.py
C:UserszsPycharmProjectsdemoindex.py
C:UserszsPycharmProjectsdemolocaleen_USLC_MESSAGESdjango.po
C:UserszsPycharmProjectsdemolocaleen_USLC_MESSAGES
C:UserszsPycharmProjectsdemolocaleen_US
C:UserszsPycharmProjectsdemolocalezh_CNLC_MESSAGESlang.mo
C:UserszsPycharmProjectsdemolocalezh_CNLC_MESSAGESlang.po
C:UserszsPycharmProjectsdemolocalezh_CNLC_MESSAGES
C:UserszsPycharmProjectsdemolocalezh_CN
C:UserszsPycharmProjectsdemolocale
C:UserszsPycharmProjectsdemoname.txt
C:UserszsPycharmProjectsdemotext.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:UserszsPycharmProjectsdemo"
 allfile=getallfiles(path)
 for file in allfile:
  print file




#输出结果

C:UserszsPycharmProjectsdemo.idea
C:UserszsPycharmProjectsdemolocale
C:UserszsPycharmProjectsdemofunctiondemo.py
C:UserszsPycharmProjectsdemoindex.py
C:UserszsPycharmProjectsdemoname.txt
C:UserszsPycharmProjectsdemotext.txt
C:UserszsPycharmProjectsdemo.ideademo.iml
C:UserszsPycharmProjectsdemo.ideaencodings.xml
C:UserszsPycharmProjectsdemo.ideamisc.xml
C:UserszsPycharmProjectsdemo.ideamodules.xml
C:UserszsPycharmProjectsdemo.ideaworkspace.xml
C:UserszsPycharmProjectsdemolocaleen_US
C:UserszsPycharmProjectsdemolocalezh_CN
C:UserszsPycharmProjectsdemolocaleen_USLC_MESSAGES
C:UserszsPycharmProjectsdemolocaleen_USLC_MESSAGESdjango.po
C:UserszsPycharmProjectsdemolocalezh_CNLC_MESSAGES
C:UserszsPycharmProjectsdemolocalezh_CNLC_MESSAGESlang.mo
C:UserszsPycharmProjectsdemolocalezh_CNLC_MESSAGESlang.po

小结

两种方法输入结果是一样的。但是在输入的顺序有差异。对比感觉python的os模块的walk()方法比较简单

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对积木网的支持。

python运行其他程序的实现方法
python运行其他程序的实现方法这里提供了两种实现方法,一.os.system()函数和使用ShellExecute函数运行其他程序及实现代码,大家可以参考下,一使用os.syste

python记录程序运行时间的三种方法
python记录程序运行时间的三种方法这里提供了python记录程序运行时间的三种方法,并附有实现代码,最后进行比较,大家参考下:方法1importdatetimestarttim

Python实现发送QQ邮件的封装
本文实例为大家分享了Python实现发送QQ邮件的封装代码,供大家参考,具体内容如下封装codeimportsmtplibfromemail.mime.imageimportMIMEImagefromemail.mime.multipartimportMI

本周排行

更新排行

强悍的草根IT技术社区,这里应该有您想要的! 友情链接:b2b电子商务
Copyright © 2010 Gimoo.Net. All Rights Rreserved  京ICP备05050695号