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之wxPython应用实例
Sep 28 Python
使用Python脚本来获取Cisco设备信息的示例
May 04 Python
python学习 流程控制语句详解
Jun 01 Python
书单|人生苦短,你还不用python!
Dec 29 Python
Diango + uwsgi + nginx项目部署的全过程(可外网访问)
Apr 22 Python
详解用python写一个抽奖程序
May 10 Python
Python实现Mysql数据统计及numpy统计函数
Jul 15 Python
python模拟实现斗地主发牌
Jan 07 Python
Python数据正态性检验实现过程
Apr 18 Python
使用Python项目生成所有依赖包的清单方式
Jul 13 Python
Python操作dict时避免出现KeyError的几种解决方法
Sep 20 Python
python中的plt.cm.Paired用法说明
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
PHP管理内存函数 memory_get_usage()使用介绍
2012/09/23 PHP
在smarty中调用php内置函数的方法
2013/02/07 PHP
ThinkPHP之M方法实例详解
2014/06/20 PHP
PHP内核探索之解释器的执行过程
2015/12/22 PHP
PHP中静态变量的使用方法实例分析
2016/12/01 PHP
Yii框架布局文件的动态切换操作示例
2019/11/11 PHP
javascript 特性检测并非浏览器检测
2010/01/15 Javascript
基于jquery封装的一个js分页
2011/11/15 Javascript
JS图片根据鼠标滚动延时加载的实例代码
2013/07/13 Javascript
jQuery向上遍历DOM树之parents(),parent(),closest()之间的区别
2013/12/02 Javascript
jquery中的ajax方法怎样通过JSONP进行远程调用
2014/05/04 Javascript
jquery ui dialog替代confirm实例分析
2016/01/25 Javascript
深入理解JS函数的参数(arguments)的使用
2016/05/28 Javascript
js遍历json的key和value的实例
2017/01/22 Javascript
easy ui datagrid 从编辑框中获取值的方法
2017/02/22 Javascript
简单谈谈vue的过渡动画(推荐)
2017/10/11 Javascript
详解在React中跨组件分发状态的三种方法
2018/08/09 Javascript
使用Angular Cli如何创建Angular私有库详解
2019/01/30 Javascript
vue中各种通信传值方式总结
2019/02/14 Javascript
vue接通后端api以及部署到服务器操作
2020/08/13 Javascript
Nuxt 项目性能优化调研分析
2020/11/07 Javascript
Python内置的HTTP协议服务器SimpleHTTPServer使用指南
2016/03/30 Python
Python遍历文件夹和读写文件的实现方法
2017/05/10 Python
Python设计模式之中介模式简单示例
2018/01/09 Python
100行python代码实现跳一跳辅助程序
2018/01/15 Python
利用python 更新ssh 远程代码 操作远程服务器的实现代码
2018/02/08 Python
python批量修改图片尺寸,并保存指定路径的实现方法
2019/07/04 Python
python 导入数据及作图的实现
2019/12/03 Python
利用pytorch实现对CIFAR-10数据集的分类
2020/01/14 Python
css3实现超立体3D图片侧翻倾斜效果
2014/04/16 HTML / CSS
人力资源部经理岗位职责规定
2014/02/23 职场文书
小学生开学感言
2014/02/28 职场文书
会计求职自荐信
2014/06/20 职场文书
2016年秋季开学典礼新闻稿
2015/11/25 职场文书
基于nginx实现上游服务器动态自动上下线无需reload的实现方法
2021/03/31 Servers
使用Redis实现秒杀功能的简单方法
2021/05/08 Redis