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求pi的方法
Oct 08 Python
Linux下使用python调用top命令获得CPU利用率
Mar 10 Python
Python数据结构之单链表详解
Sep 12 Python
python实现ID3决策树算法
Dec 20 Python
详解python字节码
Feb 07 Python
Python3实现爬虫爬取赶集网列表功能【基于request和BeautifulSoup模块】
Dec 05 Python
Python Datetime模块和Calendar模块用法实例分析
Apr 15 Python
python实现微信防撤回神器
Apr 29 Python
python图形工具turtle绘制国际象棋棋盘
May 23 Python
python实现点击按钮修改数据的方法
Jul 17 Python
python3实现用turtle模块画一棵随机樱花树
Nov 21 Python
Python3常见函数range()用法详解
Dec 30 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使用curl存储cookie的示例
2014/03/31 PHP
php cli换行示例
2014/04/22 PHP
JavaScript高级程序设计(第3版)学习笔记7 js函数(上)
2012/10/11 Javascript
js获取class的所有元素
2013/03/28 Javascript
Extjs 继承Ext.data.Store不起作用原因分析及解决
2013/04/15 Javascript
纯javascript判断查询日期是否为有效日期
2015/08/24 Javascript
javascript中的作用域和闭包详解
2016/01/13 Javascript
AngularJS 单元测试(二)详解
2016/09/21 Javascript
浅谈js中同名函数和同名变量的执行问题
2017/02/12 Javascript
浅谈Vuex@2.3.0 中的 state 支持函数申明
2017/11/22 Javascript
基于Angular中ng-controller父子级嵌套的相关属性详解
2018/10/08 Javascript
详解js访问对象的属性和方法
2018/10/25 Javascript
使用webpack4编译并压缩ES6代码的方法示例
2019/04/24 Javascript
教你搭建按需加载的Vue组件库(小结)
2019/07/29 Javascript
小程序中设置缓存过期的实现方法
2020/01/14 Javascript
基于vue中的scoped坑点解说
2020/09/04 Javascript
python数据结构之图深度优先和广度优先实例详解
2015/07/08 Python
Python中set与frozenset方法和区别详解
2016/05/23 Python
Python实现类似比特币的加密货币区块链的创建与交易实例
2018/03/20 Python
对numpy中shape的深入理解
2018/06/15 Python
python 字典中取值的两种方法小结
2018/08/02 Python
python实现简单的单变量线性回归方法
2018/11/08 Python
对pandas通过索引提取dataframe的行方法详解
2019/02/01 Python
Tensorflow Summary用法学习笔记
2020/01/10 Python
Python unittest 自动识别并执行测试用例方式
2020/03/09 Python
Python网页解析器使用实例详解
2020/05/30 Python
python基于爬虫+django,打造个性化API接口
2021/01/21 Python
捷克钓鱼用品网上商店:Parys.cz
2018/06/15 全球购物
投标单位介绍信
2014/01/09 职场文书
商业房地产广告语
2014/03/13 职场文书
《诚实与信任》教学反思
2014/04/10 职场文书
邮政竞聘演讲稿
2014/09/03 职场文书
2014小学生国庆65周年演讲稿
2014/09/21 职场文书
原告离婚代理词
2015/05/23 职场文书
卢旺达饭店观后感
2015/06/05 职场文书
党风廉政建设心得体会
2019/05/21 职场文书