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 相关文章推荐
python的tkinter布局之简单的聊天窗口实现方法
Sep 03 Python
python模拟鼠标拖动操作的方法
Mar 11 Python
浅谈python socket函数中,send与sendall的区别与使用方法
May 09 Python
详解Golang 与python中的字符串反转
Jul 21 Python
python读取视频流提取视频帧的两种方法
Oct 22 Python
pyqt5实现俄罗斯方块游戏
Jan 11 Python
PyCharm中代码字体大小调整方法
Jul 29 Python
Python适配器模式代码实现解析
Aug 02 Python
Pycharm远程连接服务器并实现代码同步上传更新功能
Feb 25 Python
详解selenium + chromedriver 被反爬的解决方法
Oct 28 Python
PyCharm配置KBEngine快速处理代码提示冲突、配置命令问题
Apr 03 Python
OpenCV-Python实现油画效果的实例
Jun 08 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
超强分页类2.0发布,支持自定义风格,默认4种显示模式
2007/01/02 PHP
PHP 数据库树的遍历方法
2009/02/06 PHP
PHP 中提示undefined index如何解决(多种方法)
2016/03/16 PHP
extjs 学习笔记(一) 一些基础知识
2009/10/13 Javascript
jQuery与其它库冲突的解决方法
2010/06/25 Javascript
jQuery对Select的操作大集合(收藏)
2013/12/28 Javascript
js的[defer]和[async]属性
2014/11/24 Javascript
jquery实现的树形目录实例
2015/06/26 Javascript
jQuery.parseHTML() 函数详解
2017/01/09 Javascript
Vuex利用state保存新闻数据实例
2017/06/28 Javascript
微信小程序实现点击文字页面跳转功能【附源码下载】
2017/12/12 Javascript
基于Node.js实现压缩和解压缩的方法
2018/02/13 Javascript
JS大坑之19位数的Number型精度丢失问题详解
2019/04/22 Javascript
微信小程序获取用户信息及手机号(后端TP5.0)
2019/09/12 Javascript
小程序跨页面交互的作用与方法详解
2020/01/07 Javascript
Vue实现简单的留言板
2020/10/23 Javascript
[01:46]TI4西雅图DOTA2前线报道 中国选手抱团调时差
2014/07/08 DOTA
Python 条件判断的缩写方法
2008/09/06 Python
python发送HTTP请求的方法小结
2015/07/08 Python
win7上python2.7连接mysql数据库的方法
2017/01/14 Python
Python新手们容易犯的几个错误总结
2017/04/01 Python
Python并发编程协程(Coroutine)之Gevent详解
2017/12/27 Python
Python matplotlib画图实例之绘制拥有彩条的图表
2017/12/28 Python
Python检测网络延迟的代码
2018/05/15 Python
Python 确定多项式拟合/回归的阶数实例
2018/12/29 Python
Python学习笔记之视频人脸检测识别实例教程
2019/03/06 Python
tesserocr与pytesseract模块的使用方法解析
2019/08/30 Python
英国综合网上购物商城:The Hut
2018/07/03 全球购物
上班离岗检讨书
2014/01/27 职场文书
我的中国梦演讲稿初中篇
2014/08/19 职场文书
关于感恩的演讲稿400字
2014/08/26 职场文书
乡党委干部党的群众路线教育实践活动个人对照检查材料思想汇报
2014/10/01 职场文书
群众路线对照检查剖析材料
2014/10/09 职场文书
党校党性分析材料
2014/12/19 职场文书
本科毕业论文指导教师评语
2014/12/30 职场文书
鉴史问廉观后感
2015/06/10 职场文书