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处理二进制数据的方法
Jun 03 Python
Python复制文件操作实例详解
Nov 10 Python
在win和Linux系统中python命令行运行的不同
Jul 03 Python
python模块之re正则表达式详解
Feb 03 Python
Python中执行存储过程及获取存储过程返回值的方法
Oct 07 Python
python简易实现任意位数的水仙花实例
Nov 13 Python
python+openCV利用摄像头实现人员活动检测
Jun 22 Python
使用python socket分发大文件的实现方法
Jul 08 Python
Python的控制结构之For、While、If循环问题
Jun 30 Python
如何验证python安装成功
Jul 06 Python
anaconda3安装及jupyter环境配置全教程
Aug 24 Python
Python实现socket库网络通信套接字
Jun 04 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实现的支付宝网页支付功能示例【基于TP5框架】
2019/09/16 PHP
使用composer安装使用thinkphp6.0框架问题【视频教程】
2019/10/01 PHP
JS 获取滚动条高度示例代码
2013/10/24 Javascript
ExtJS4中使用mixins实现多继承示例
2013/12/03 Javascript
简体中文转换繁体中文(实现代码)
2013/12/25 Javascript
javascript事件冒泡详解和捕获、阻止方法
2014/04/12 Javascript
JS实现横向与竖向两个选项卡Tab联动的方法
2015/09/27 Javascript
JS实现页面载入时随机显示图片效果
2016/09/07 Javascript
JS实现倒计时(天数、时、分、秒)
2016/11/16 Javascript
Node.js之网络通讯模块实现浅析
2017/04/01 Javascript
jQuery实现简单的抽奖游戏
2017/05/05 jQuery
浅谈vue+webpack项目调试方法步骤
2017/09/11 Javascript
Vue.js实现列表清单的操作方法
2017/11/15 Javascript
基于Vue2.X的路由和钩子函数详解
2018/02/09 Javascript
layui select动态添加option的实例
2018/03/07 Javascript
js删除数组中某几项的方法总结
2019/01/16 Javascript
在vue中获取微信支付code及code被占用问题的解决方法
2019/04/16 Javascript
jQuery/JS监听input输入框值变化实例
2019/10/17 jQuery
浅谈小程序globalData的那些事儿
2019/11/01 Javascript
nodejs中内置模块fs,path常见的用法说明
2020/11/07 NodeJs
javascript实现前端分页功能
2020/11/26 Javascript
[01:21]2018DOTA2亚洲邀请赛4.5采访 打DOTA2也能有女朋友?
2018/04/06 DOTA
详解 Python 读写XML文件的实例
2017/08/02 Python
Python字符串拼接六种方法介绍
2017/12/18 Python
Python中使用支持向量机SVM实践
2017/12/27 Python
windows下python 3.6.4安装配置图文教程
2018/08/21 Python
python实现网站用户名密码自动登录功能
2019/08/09 Python
Python 3.10 的首个 PEP 诞生,内置类型 zip() 迎来新特性(推荐)
2020/07/03 Python
什么是Assembly(程序集)
2014/09/14 面试题
会计专业个人自我鉴定
2014/03/21 职场文书
党的群众路线教育实践活动整改落实情况自查报告
2014/10/28 职场文书
离婚协议书范文
2015/01/26 职场文书
员工家属慰问信
2015/03/24 职场文书
2015年售票员工作总结
2015/04/29 职场文书
2015年大学迎新工作总结
2015/07/16 职场文书
2019个人工作自我评价范文(3篇)
2019/09/19 职场文书