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 相关文章推荐
在Django中创建URLconf相关的通用视图的方法
Jul 20 Python
详解Django之auth模块(用户认证)
Apr 17 Python
python在每个字符后添加空格的实例
May 07 Python
pygame游戏之旅 添加游戏界面按键图形
Nov 20 Python
PySide和PyQt加载ui文件的两种方法
Feb 27 Python
Python可迭代对象操作示例
May 07 Python
对python 调用类属性的方法详解
Jul 02 Python
Python 给定的经纬度标注在地图上的实现方法
Jul 05 Python
python实现自动化报表功能(Oracle/plsql/Excel/多线程)
Dec 02 Python
用Python制作mini翻译器的实现示例
Aug 17 Python
filter使用python3代码进行迭代元素的实例详解
Dec 03 Python
详解Django的MVT设计模式
Apr 29 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生成便于打印的网页
2006/10/09 PHP
php microtime获取浮点的时间戳
2010/02/21 PHP
PHP浮点数精度问题汇总
2015/05/13 PHP
js显示时间 js显示最后修改时间
2013/01/02 Javascript
jquery创建一个ajax关键词数据搜索实现思路
2013/02/26 Javascript
使用jquery prev()方法找到同级的前一个元素
2014/07/11 Javascript
jquery库文件略庞大用纯js替换jquery的方法
2014/08/12 Javascript
jQuery图片左右滚动代码 有左右按钮实例
2016/06/20 Javascript
Jquery遍历select option和添加移除option的实现方法
2016/08/26 Javascript
手机移动端实现 jquery和HTML5 Canvas的幸运大奖盘特效
2016/12/06 Javascript
JavaScript闭包和范围实例详解
2016/12/19 Javascript
Node.js调试技术总结分享
2017/03/12 Javascript
Angular使用 ng-img-max 调整浏览器中的图片的示例代码
2017/08/17 Javascript
详解Vue路由History mode模式中页面无法渲染的原因及解决
2017/09/28 Javascript
JS实现的tab页切换效果完整示例
2018/12/18 Javascript
layui table 复选框跳页后再回来保持原来选中的状态示例
2019/10/26 Javascript
JavaScript实现切换多张图片
2021/01/27 Javascript
Python用UUID库生成唯一ID的方法示例
2016/12/15 Python
Python 多核并行计算的示例代码
2017/11/07 Python
python解析json串与正则匹配对比方法
2018/12/20 Python
python使用rsa非对称加密过程解析
2019/12/28 Python
TensorFlow命名空间和TensorBoard图节点实例
2020/01/23 Python
Python xlwt模块使用代码实例
2020/06/10 Python
如何使用Python处理HDF格式数据及可视化问题
2020/06/24 Python
HTML5中的Scoped属性使用实例
2014/04/23 HTML / CSS
BONIA官方网站:国际奢侈品牌和皮革专家
2016/11/27 全球购物
澳大利亚电子产品购物网站:Dick Smith
2017/02/02 全球购物
SOKOLOV官网:俄罗斯珠宝首饰品牌
2021/01/02 全球购物
大学生入党自我鉴定
2013/10/31 职场文书
财务管理职业生涯规划范文
2013/12/27 职场文书
中学教师管理制度
2014/01/14 职场文书
学生生病请假条范文
2014/02/16 职场文书
2014年公务员思想汇报范文:全心全意为人民服务
2014/03/06 职场文书
三年级作文之趣事作文
2019/11/04 职场文书
Python自动化之批量处理工作簿和工作表
2021/06/03 Python
详解Redis复制原理
2021/06/04 Redis