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基于pygame实现响应游戏中事件的方法(附源码)
Nov 11 Python
Python简单生成随机数的方法示例
Mar 31 Python
python实现textrank关键词提取
Jun 22 Python
django与小程序实现登录验证功能的示例代码
Feb 19 Python
把JSON数据格式转换为Python的类对象方法详解(两种方法)
Jun 04 Python
Python二进制文件读取并转换为浮点数详解
Jun 25 Python
python 模拟银行转账功能过程详解
Aug 06 Python
在Python 的线程中运行协程的方法
Feb 24 Python
基于python实现地址和经纬度转换
May 19 Python
Python爬虫爬取糗事百科段子实例分享
Jul 31 Python
如何利用Python写个坦克大战
Nov 18 Python
python基础之模块的导入
Oct 24 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
PHP中基本符号及使用方法
2010/03/23 PHP
WordPress中对访客评论功能的一些优化方法
2015/11/24 PHP
PHP各种常见经典算法总结【排序、查找、翻转等】
2019/08/05 PHP
Laravel框架处理用户的请求操作详解
2019/12/20 PHP
js动态给table添加/删除tr的方法
2013/08/02 Javascript
JavaScript表单通过正则表达式验证电话号码
2014/03/14 Javascript
实现非常简单的js双向数据绑定
2015/11/06 Javascript
Bootstrap打造一个左侧折叠菜单的系统模板(二)
2016/05/17 Javascript
详解开源的JavaScript插件化框架MinimaJS
2017/10/26 Javascript
js获取对象,数组所有属性键值(key)和对应值(value)的方法示例
2019/06/19 Javascript
使用vue-router切换页面时实现设置过渡动画
2019/10/31 Javascript
nodejs实现的http、https 请求封装操作示例
2020/02/06 NodeJs
javascript设计模式 ? 工厂模式原理与应用实例分析
2020/04/09 Javascript
前端vue如何使用高德地图
2020/11/05 Javascript
Python中的模块和包概念介绍
2015/04/13 Python
Python中字典的浅拷贝与深拷贝用法实例分析
2018/01/02 Python
python的pygal模块绘制反正切函数图像方法
2019/07/16 Python
pytorch实现用Resnet提取特征并保存为txt文件的方法
2019/08/20 Python
wxPython多个窗口的基本结构
2019/11/19 Python
Python生成词云的实现代码
2020/01/14 Python
Python3将ipa包中的文件按大小排序
2020/04/17 Python
Anaconda3中的Jupyter notebook添加目录插件的实现
2020/05/18 Python
Tensorflow卷积实现原理+手写python代码实现卷积教程
2020/05/22 Python
CSS3实现各种图形的示例代码
2016/10/19 HTML / CSS
wedgwood加拿大官网:1759年成立的英国国宝级陶瓷餐具品牌
2018/07/17 全球购物
编码实现字符串转整型的函数
2012/06/02 面试题
建筑自我鉴定
2013/10/19 职场文书
应届毕业生个人求职信范文
2014/01/29 职场文书
黄河象教学反思
2014/02/10 职场文书
成绩单公证书
2014/04/10 职场文书
企业负责人任命书
2014/06/05 职场文书
庆祝教师节标语
2014/10/09 职场文书
2014年话务员工作总结
2014/11/19 职场文书
2016寒假社会实践心得体会范文
2015/10/09 职场文书
2016年质量月活动总结报告
2016/04/05 职场文书
企业管理不到位检讨书
2019/06/27 职场文书