Python学习笔记之遍历目录文件(递归和walk())

原创 2017年07月14日 00:02:05

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:\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()方法比较简介

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

在WPF中自定义控件(2) UserControl

原文地址:http://www.cnblogs.com/zhouyinhui/archive/2007/10/27/939920.html 在这里我们将将打造一个UserControl(用户控件...

Linux下 C语言实现遍历指定目录下指定格式的文件

/* **path为指定的目录路径,遍历该目录下的文件,找出指定格式(.mp3)的文件 **并将文件名分组分别写入.txt文件,方便多进程处理 */ #define SINGLENUM 10 int...
  • yff1030
  • yff1030
  • 2012年08月12日 21:06
  • 6960

python学习笔记之os.walk()实现遍历文件搜索字符串

为了熟练使用python,打算有事没事用python写一些实用的小脚本 我刚刚进入计算机专业一年,一些专业用语不是很清楚,有说错的地方欢迎大家批评指正—————————–分割线———————————...

Python递归遍历目录下所有文件

#自定义函数: import os path="D:\\Temp_del\\a" def gci (path): """this is a statement""" parents = ...
  • gzhouc
  • gzhouc
  • 2016年10月24日 21:39
  • 4127

Python递归遍历目录下所有文件

Python递归遍历目录下所有文件 #自定义函数: import os path="D:\\Temp_del\\a" def gci (path): """this is a state...

php如何实现递归遍历文件目录

  • 2017年05月04日 00:46
  • 1KB
  • 下载

Python学习笔记(21)-目录遍历

一,简介遍历一个目录下所有的文件夹和文件是非常有用的事情,在python中os模块提供了非常简单易行的遍历方法os.walk(path)。另外一定要了解的一点是,os.walk(path)遍历有点“广...

in_order_walk 中序遍历的非递归实现源码

#include "stdafx.h" /* ** 数据结构:链表实现的二叉树,在内存中分配的连续区域模拟数组实现的栈,栈中存放的是树结点的指针(地址) ** ** ** */ #include ...

数据结构与算法学习笔记——二叉树遍历(一)(递归、迭代)

最近学习二叉树相关的内容,个人认为其中最重要的应该就是二叉树的遍历了,包括先序,中序,后续。通常二叉树的遍历有三种方法:递归、迭代和Morris遍历。递归应该是最容易理解了, Morris遍历最难理解...

【算法学习笔记】10.数据结构基础 二叉树初步练习3(遍历与递归复习)

首先先来复习一下递归法解决问题。引例就用十分经典的
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Python学习笔记之遍历目录文件(递归和walk())
举报原因:
原因补充:

(最多只允许输入30个字)