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

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

python下递归遍历目录和文件

#!/usr/bin/python #coding:utf8 import os def dirlist(path, allfile): filelist = os.listdir(path)...
  • yuan_lo
  • yuan_lo
  • 2014年09月21日 10:46
  • 18339

is_dir(),opendir(),readdir()简单遍历目录下的文件

function listdoc($dir){ if(is_dir($dir)){//判断是否是目录 if($hd = opendir($dir)){//是目录,则打开 while($f...
  • u011341352
  • u011341352
  • 2017年03月02日 15:52
  • 365

PHP递归遍历指定文件夹内的文件

今天早上在地铁上看了关于文件和文件夹的一章,正好最近刚搞懂linux的文件系统,觉得对文件属性的访问跟Shell命令很像,所以想晚上来实践一下。 发现php的文件夹函数好像没有提供遍历文件夹下的...
  • u012515231
  • u012515231
  • 2016年03月28日 23:29
  • 1179

[Linux C]递归遍历指定目录下的子目录和文件

/* 功能:演示了在Linux下利用C语言递归遍历指定目录下的子目录(不含隐藏目录)和文件 */ #include #include #include void List(ch...
  • JoeBlackzqq
  • JoeBlackzqq
  • 2011年10月14日 16:24
  • 5706

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

Python递归遍历目录下所有文件 #自定义函数: import os path="D:\\Temp_del\\a" def gci (path): """this is a state...
  • xiaofei0859
  • xiaofei0859
  • 2016年04月15日 18:40
  • 2122

perl 递归地遍历目录下的文件

#!/usr/bin/perl -w use strict; use File::Spec; local $\ ="\n";#当前模块的每行输出加入换行符 my %options; #目...
  • csujiangyu
  • csujiangyu
  • 2015年03月01日 14:14
  • 2380

[Windowns C]递归遍历指定目录下的子目录和文件

/* 功能:演示了利用C语言递归遍历指定目录下的子目录和文件! 说明:经修改也可以搜索文件名符合特定格式的文件,如修改“\\*.*”为“\\*.log” */ #include #i...
  • JoeBlackzqq
  • JoeBlackzqq
  • 2011年10月13日 22:10
  • 3186

php队列方式和递归方式遍历目录文件及子目录

如果目录很多,推荐队列方式,递归方式会慢,慢的原因:递归的实现是通过调用函数本身,函数调用的时候,每次调用时要做地址保存,参数传递等 [php] view plain copy   ...
  • wakice
  • wakice
  • 2017年02月20日 14:15
  • 673

C 语言递归遍历目录下的所有文件

#include     #include     #include     #include     void   dir_scan(char   *path,   char   *file);  ...
  • hhtang
  • hhtang
  • 2011年03月22日 10:50
  • 1107

Linux下递归遍历目录和文件

转载自: http://2309998.blog.51cto.com/2299998/1365271
  • sunny04
  • sunny04
  • 2014年07月14日 14:30
  • 1132
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Python学习笔记之遍历目录文件(递归和walk())
举报原因:
原因补充:

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