在日常开发中经常需要检查一个“目录或文件夹”内部有没有我们想要的文件或者文件夹,下面这篇文章主要给大家介绍了关于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()函数下面话不多说,就来一起看看详细的介绍:

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

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

  1. W ndows主进程已停止,windows主进程rundll32已停止工作的四种解决方法介绍

    操作系统出现:windows主进程rundll32已停止工作 这种出错的提示,一般是在Windows7操作系统之中,可能会有很多种原因导致的,所以还需要逐一排查,解决之. 这是一个很少见的问题,开机后 ...

  2. 过滤Linux下不同大小的文件,linux查找当前目录下 M/G 大小的文件,删除Linux下指定大小的文件

    过滤Linux下不同大小的文件,linux查找当前目录下 M/G 大小的文件,删除Linux下指定大小的文件 find ./ -type f -size +1G| xargs rm 在清理系统日志文件 ...

  3. python 递归遍历目录排序_python下递归遍历目录和文件

    方法一:递归调用: import os def dirlist(path, allfile): filelist =  os.listdir(path) for filename in filelis ...

  4. python获取文件修改时间 错误_python错误记录

    raise ImproperlyConfigured("Error loading MySQLdb module: %s" % e) django.core.exceptions. ...

  5. Java17-day08【File(创建和删除文件、判断和获取功能、遍历目录)、IO流(字节流写数据、异常处理、字节流读数据、复制文本文件、复制图片)】

    视频+资料(工程源码.笔记)[链接:https://pan.baidu.com/s/1MdFNUADVSFf-lVw3SJRvtg   提取码:zjxs] Java基础--学习笔记(零起点打开java ...

  6. load()是python文件操作的函数_python基础总结(函数,文件操作)

    divmod(a, b)#分别取商和余数 float([x])#将一个字符串或数转换为浮点数.如果无参数将返回0.0 int([x[, base]])#将一个字符转换为int类型,base表示进制 l ...

  7. centos查看文件修改历史_Linux环境下查看历史操作命令及清除方法

    在Linux环境中可以通过方向键的上下按键查看近期键入的命令.但这种方法只能一个一个的查看,其实系统提供了查看所有历史命令的方法. 在终端中输入以下命令查看所有命令: history [root@te ...

  8. python可以实现哪些功能_Python中实现机器学习功能的四种方法介绍

    本篇文章给大家带来的内容是关于Python中实现机器学习功能的四种方法介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 在本文中,我们将介绍从数据集中选择要素的不同方法; 并使用S ...

  9. linux中rm删除的文件是否可以恢复,Linux下用rm删除的文件的恢复方法

    Linux下用rm删除的文件的恢复方法_Linux教程_Linux公社-Linux系统门户网站 https://www.linuxidc.com/Linux/2008-08/14744.htm lin ...

  10. python安装到桌面的路径是什么_Python 获取windows桌面路径的5种方法小结

    这里介绍了5中python获取window桌面路径的方法,获取这个路径有什么用呢?一般是将程序生成的文档输出到桌面便于查看编辑. 前两个方法是通过注册表来获取当前windows桌面绝对路径,比较推荐使 ...

最新文章

  1. pandas筛选dataframe列名称中包含特定字符串的数据列(select columns contains specifiec substring in dataframe)
  2. linux上jar包无法识别本地文件格式,解决使用maven将项目打包成jar包后运行在linux系统中无法读取jar包中文件的问题...
  3. MATLAB-数据类型
  4. $(@:_config=)的意思
  5. PAT (Basic Level) Practice (中文)1008 数组元素循环右移问题 (20 分)
  6. 用python念数字_Python-数据类型之数字
  7. 计算机软件与电子出版物,电子出版物出版和互联网出版.pdf
  8. 【OFDM系列3】AWGN下基于循环前缀(CP)OFDM调制解调原理、信噪比计算及仿真(H Harada经典OFDM书籍中代码详解及更正)
  9. WordPress主题Ashade2.0摄影展示 图片展示主题
  10. 【系统分析师之路】如何备考系统分析师与架构师(软件水平考试)
  11. 14款国内外主流三维GIS软件,总有一款中意你
  12. SNMP(Simple Network Management Protocol)——简单网络管理协议
  13. 数电2_2——逻辑函数的变换与化简
  14. Android Studio生成APP方法及其所在位置
  15. abb机器人写字程序实例_ABB机器人编程之程序流程指令(含案例)
  16. 适用于低配机器,从USB摄像头拉H264流的Qt播放器
  17. 圆锥曲线中的范围最值问题
  18. 日期计算器输入天数计算日期_如何在Windows计算器中执行日期计算
  19. 冰雪复古优化服务器,冰雪复古单职业:最适合长久稳定打金的传奇
  20. windows下模拟鼠标点击和键盘输入

热门文章

  1. 应用多元统计分析第四章基于最小二乘估计线性回归分析python代码
  2. 一次http请求中的信息
  3. junit搭配hamcrest使用
  4. 剑指offer面试题:输入某二叉树的前序遍历和中序遍历,输出后序遍历
  5. 阿里笔试题:求两个子序列的最大连续子序列
  6. C# 事件和Unity3D
  7. 引用计数指针实现(含源码)
  8. 《深入浅出struts》读书笔记(2)
  9. 最小上界sup(来自wiki)
  10. oracle sql中查询语句where中字段不为空用if怎么写_MyBatis手把手跟我做系列(三) --- 动态SQL标签...