Python遍历目录中的所有文件的方法


Posted in Python onJuly 08, 2016

os.walk生成器
os.walk(PATH), PATH是个文件夹路径,当然可以用.或者../这样啦.
返回的是个三元元组为元素的列表, 每个元素代表了一个文件夹下的内容.第一个就是当前文件夹下内容.
返回的三元元组代表(该工作文件夹, 该文件夹下的文件夹的列表, 该文件夹下文件的列表).
所以,
获得所有子文件夹, 就是(d代表这三元元组):

os.path.join(d[0],d[1]);

获得所有子文件, 就是:

os.path.join(d[0],d[2]);

以下例子使用了两套循环, 遍历后得到所有文件名的list后再循环所有文件:

result = [os.path.join(dp, f) for dp, dn, fs in os.walk("_pages") for f in fs if os.path.splitext(f)[1] == '.html']
for fname in result:
 #do something

实际等于

result=[]
for dp, dn, fs in os.walk("_pages"):
 for f in fs:
 if (os.path.splitext(f)[1] == '.html'):
  result.append(os.path.join(dp, f))
for fname in result:
 #do something

最后判断是否html后缀获得文件名, 还可以使用glob:

result = [y for x in os.walk(PATH) for y in glob.glob(os.path.join(x[0], '*.txt'))]

还可以使用迭代器方法:

from itertools import chain
import glob
result = (chain.from_iterable(glob.iglob(os.path.join(x[0], '*.txt')) for x in os.walk('.')))

进阶
标准文件数遍历生成器os.walk既强大又灵活,不过os.walk还缺乏应用程序需要的一些细节上的处理能力,例如根据某种模式选择文件,对所有文件(或目录)进行排序,或只遍历当前目录不进入其子目录,因此需要对接口对应进行封装。

import os, fnmatch 
 
def filter_files(dirname, patterns='*', single_level=False, yield_folders=False): 
  patterns = patterns.split(';') 
  allfiles = [] 
  for rootdir, subdirname, files in os.walk(dirname): 
    print subdirname 
    allfiles.extend(files) 
    if yield_folders: 
      allfiles.extend(dubdirname) 
    if single_level: 
      break 
  allfiles.sort() 
  for eachpattern in patterns: 
    for eachfile in fnmatch.filter(allfiles, eachpattern): 
        print os.path.normpath(eachfile)

说明:
1.extend与append的区别
列表是以类的形式实现的。“创建”列表实际上是将一个类实例化。因此,列表有多种方法可以操作。  列表可包含任何数据类型的元素,单个列表中的元素无须全为同一类型。 append() 方法向列表的尾部添加一个新的元素。只接受一个参数,extend()方法只接受一个列表作为参数,并将该参数的每个元素都添加到原有的列表中。
2. fnmatch模块
fnmatch 模块使用模式来匹配文件名。模式语法和 Unix shell 中所使用的相同. 星号(*) 匹配零个或更多个字符, 问号(?) 匹配单个字符。你也可以使用方括号来指定字符范围,例如 [0-9] 代表一个数字,其他所有字符都匹配它们本身。
1) fnmatch.fnmatch(name, pattern)方法:测试name是否匹配pattern,返回true/false
2) fnmatch.filter(names, pat)实现列表特殊字符的过滤或筛选,返回符合匹配模式的字符列表,当然names表示的是列表

Python 相关文章推荐
Python3基础之基本数据类型概述
Aug 13 Python
Python cookbook(数据结构与算法)实现查找两个字典相同点的方法
Feb 18 Python
python IDLE 背景以及字体大小的修改方法
Jul 12 Python
关于Flask项目无法使用公网IP访问的解决方式
Nov 19 Python
python wxpython 实现界面跳转功能
Dec 17 Python
Python关于反射的实例代码分享
Feb 20 Python
python闭包、深浅拷贝、垃圾回收、with语句知识点汇总
Mar 11 Python
Python logging模块写入中文出现乱码
May 21 Python
python怎么自定义捕获错误
Jun 29 Python
python实现梯度下降算法的实例详解
Aug 17 Python
如何利用Python给自己的头像加一个小国旗(小月饼)
Oct 02 Python
Tensorflow与RNN、双向LSTM等的踩坑记录及解决
May 31 Python
Python常用的内置序列结构(列表、元组、字典)学习笔记
Jul 08 #Python
使用Python读写及压缩和解压缩文件的示例
Jul 08 #Python
Python中的FTP通信模块ftplib的用法整理
Jul 08 #Python
Python中使用platform模块获取系统信息的用法教程
Jul 08 #Python
Python中的os.path路径模块中的操作方法总结
Jul 07 #Python
简介Python的collections模块中defaultdict类型的用法
Jul 07 #Python
Python的collections模块中的OrderedDict有序字典
Jul 07 #Python
You might like
判“新”函数:得到今天与明天的秒数
2006/10/09 PHP
PHP常用技巧总结(附函数代码)
2012/02/04 PHP
PHP判断是否有Get参数的方法
2014/05/05 PHP
WebQQ最新登陆协议的用法
2014/12/22 PHP
PHP中调用SVN命令更新网站方法
2015/01/07 PHP
php使用curl打开https网站的方法
2015/06/17 PHP
PHP实现限制IP访问及提交次数的方法详解
2017/07/17 PHP
Web开发之JavaScript
2012/03/29 Javascript
js获取某元素的class里面的css属性值代码
2014/01/16 Javascript
js之ActiveX控件使用说明 new ActiveXObject()
2014/03/03 Javascript
javascript日期格式化示例分享
2014/03/05 Javascript
轻松实现javascript数据双向绑定
2015/11/11 Javascript
前端JS面试中常见的算法问题总结
2016/12/23 Javascript
原生JS实现垂直手风琴效果
2017/02/19 Javascript
Vue-Router实现组件间跳转的三种方法
2017/11/07 Javascript
微信小程序实现点击文字页面跳转功能【附源码下载】
2017/12/12 Javascript
vue 纯js监听滚动条到底部的实例讲解
2018/09/03 Javascript
详解如何在微信小程序开发中正确的使用vant ui组件
2018/09/13 Javascript
从零开始搭建vue移动端项目到上线的步骤
2018/10/15 Javascript
Vue项目中最新用到的一些实用小技巧
2018/11/06 Javascript
JS事件绑定的常用方式实例总结
2019/03/02 Javascript
vue权限问题的完美解决方案
2019/05/08 Javascript
Python使用gRPC传输协议教程
2018/10/16 Python
Python学习笔记之图片人脸检测识别实例教程
2019/03/06 Python
python实现AES和RSA加解密的方法
2019/03/28 Python
用python监控服务器的cpu,磁盘空间,内存,超过邮件报警
2021/01/29 Python
Grid 宫格常用布局的实现
2020/01/10 HTML / CSS
美国现代家具和家居商店:Apt2B
2016/08/29 全球购物
英国知名美妆护肤在线商城:Zest Beauty
2018/04/24 全球购物
汽车检测与维修专业求职信
2013/10/30 职场文书
学生宿舍管理制度
2014/01/30 职场文书
幼儿园教师自我鉴定
2014/03/20 职场文书
教师批评与自我批评心得体会
2014/10/16 职场文书
产品质量保证书范本
2015/02/27 职场文书
年终奖金发放管理制度,中小企业适用,拿去救急吧!
2019/07/12 职场文书
使用 Docker Compose 构建复杂的多容器App
2022/04/30 Servers