python 递归目录和文件 修改主组_python下递归遍历目录和文件的方法介绍

在日常开发中经常需要检查一个“目录或文件夹”内部有没有我们想要的文件或者文件夹,下面这篇文章主要给大家介绍了关于Python利用递归和walk()遍历目录文件的相关资料。

方法一:递归调用:[html] view plain copy

#!/usr/bin/python

#coding:utf8

import os

def dirlist(path, allfile):

filelist = os.listdir(path)

for filename in filelist:

filepath = os.path.join(path, filename)

if os.path.isdir(filepath):

dirlist(filepath, allfile)

else:

allfile.append(filepath)

return allfile

print dirlist("/home/yuan/testdir", [])

方法二:

os.walk()

该函数式穿件一个生成器对象来遍历整棵目录树。

top指定目录的顶级,而topdown是一个布尔值,用于指示由上而下(默认值)还是由下而上来遍历目录。返回的生成器将生成元组(dirpath,dirnames,filenames),其中dirpath是一个字符串,包含通向目录的路径,dirnames是dirpath中所有子目录的一个列表,而filename是dirpath中文件的一个列表,不包括目录。oneerror参数是一个接受单个参数的函数。

如果处理期间出现任何错误,将使用os.error的是咧来调用此函数。默认行为时忽略错误。如果由上而下地遍历目录,修改dirnames将影响到遍历过程。[python] view plain copy

#!/user/bin/python

#!conding=utf8

import os

g = os.walk("/home/yuan/testdir")

for path,d,filelist in g:

print d;

for filename in filelist:

print os.path.join(path, filename)

经常需要检查一个“目录或文件夹”内部有没有我们想要的文件或者文件夹,就需要我们循环迭代出所有文件和子文件夹,Python中遍历指定目录下所有的文件和文件夹,包含多级目录,有两种方法,一种是通过递归思想去遍历,另一种是os模块的walk()函数下面话不多说,就来一起看看详细的介绍:

3b3a3b8d66f233668661f06a0b8bc69c.png

一.递归方法#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, οnerrοr=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()方法比较简

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值