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

作者:苏打水解渴 时间:2021-08-06 00:02:54 

前言

经常需要检查一个“目录或文件夹”内部有没有我们想要的文件或者文件夹,就需要我们循环迭代出所有文件和子文件夹,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()方法比较简单

来源:http://blog.csdn.net/baidu_31956557/article/details/75094455

标签:python,递归遍历,os.walk()遍历
0
投稿

猜你喜欢

  • python scipy.misc.imsave()函数的用法说明

    2022-11-01 13:04:24
  • 浅谈django2.0 ForeignKey参数的变化

    2022-03-26 10:11:30
  • asp对象之:基于adodb.stream的文件操作类

    2008-06-07 08:38:00
  • Excel VBA连接并操作Oracle

    2009-08-08 22:58:00
  • 用Dreamweaver MX实现网站批量更新

    2009-09-13 18:39:00
  • 如何利用Redis作为Mybatis的二级缓存

    2023-07-05 10:51:11
  • 对numpy中向量式三目运算符详解

    2023-06-28 02:14:55
  • Python贪心算法实例小结

    2021-08-05 21:10:17
  • 什么是好的设计

    2010-02-25 12:22:00
  • 加密处理使密码更安全[CFS编码加密]

    2008-03-19 13:30:00
  • Python实现手写一个类似django的web框架示例

    2022-06-18 03:17:26
  • 按钮的反馈

    2009-01-01 20:06:00
  • oracle 动态AdvStringGrid完美示例 (AdvStringGrid使用技巧/Cells)

    2009-06-19 17:21:00
  • python numpy 中linspace函数示例详解

    2021-12-12 01:47:59
  • pandas DataFrame索引行列的实现

    2023-12-16 09:52:55
  • 一个修改Oracle数据库用户密码的小诀窍

    2009-09-30 15:29:00
  • 如何从Notes中读取数据?

    2009-11-15 19:57:00
  • 微信小程序实现星星评价效果

    2023-08-24 10:04:45
  • 简易的全屏透明遮罩(lightBox)

    2010-06-09 20:56:00
  • python数据挖掘Apriori算法实现关联分析

    2022-06-02 12:29:15
  • asp之家 网络编程 m.aspxhome.com