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 相关文章推荐
Cython 三分钟入门教程
Sep 17 Python
机器学习python实战之决策树
Nov 01 Python
Python爬虫实例扒取2345天气预报
Mar 04 Python
Python魔法方法功能与用法简介
Apr 04 Python
python requests更换代理适用于IP频率限制的方法
Aug 21 Python
Win10 安装PyCharm2019.1.1(图文教程)
Sep 29 Python
Python从列表推导到zip()函数的5种技巧总结
Oct 23 Python
关于numpy中eye和identity的区别详解
Nov 29 Python
在win64上使用bypy进行百度网盘文件上传功能
Jan 02 Python
Python包和模块的分发详细介绍
Jun 19 Python
简单的Python人脸识别系统
Jul 14 Python
使用python批量修改XML文件中图像的depth值
Jul 22 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
解析yahoo邮件用phpmailer发送的实例
2013/06/24 PHP
php 类中的常量、静态属性、非静态属性的区别
2017/04/09 PHP
PHP数据源架构模式之表入口模式实例分析
2020/01/23 PHP
Jquery动态进行图片缩略的原理及实现
2013/08/13 Javascript
JS简单编号生成器实现方法(附demo源码下载)
2016/04/05 Javascript
Angular2 (RC5) 路由与导航详解
2016/09/21 Javascript
javascript 动态样式添加的简单实现
2016/10/11 Javascript
jquery实时获取时间的简单实例
2017/01/26 Javascript
js轮播图无缝滚动效果
2017/06/17 Javascript
Angular2使用vscode断点调试ts文件的方法
2017/12/13 Javascript
Vue2.5 结合 Element UI 之 Table 和 Pagination 组件实现分页功能
2018/01/26 Javascript
js中Generator函数的深入讲解
2019/04/07 Javascript
Vuex 模块化使用详解
2019/07/31 Javascript
vue2.x 通过后端接口代理,获取qq音乐api的数据示例
2019/10/30 Javascript
vue elementUI 表单校验的实现代码(多层嵌套)
2019/11/06 Javascript
javascript自定义加载loading效果
2020/09/15 Javascript
微信小程序:报错(in promise) MiniProgramError
2020/10/30 Javascript
Python中实现对Timestamp和Datetime及UTC时间之间的转换
2015/04/08 Python
Python获取暗黑破坏神3战网前1000命位玩家的英雄技能统计
2016/07/04 Python
Python正则替换字符串函数re.sub用法示例
2017/01/19 Python
详解python中的json和字典dict
2018/06/22 Python
解决python3 urllib 链接中有中文的问题
2018/07/16 Python
Scrapy框架爬取西刺代理网免费高匿代理的实现代码
2019/02/22 Python
Python3实现定时任务的四种方式
2019/06/03 Python
PyTorch中反卷积的用法详解
2019/12/30 Python
Python reduce函数作用及实例解析
2020/05/08 Python
python将数据插入数据库的代码分享
2020/08/16 Python
Pytorch自定义Dataset和DataLoader去除不存在和空数据的操作
2021/03/03 Python
使用phonegap检测网络状态的方法
2017/03/30 HTML / CSS
暑期社会实践学生的自我评价
2014/01/09 职场文书
财务会计人员求职的自我评价
2014/01/13 职场文书
招聘专员岗位职责
2014/03/07 职场文书
小学优秀教师事迹材料
2014/12/16 职场文书
实习单位指导教师评语
2014/12/30 职场文书
win10安装配置nginx的过程
2021/03/31 Servers
带你彻底理解JavaScript中的原型对象
2021/04/14 Javascript