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 相关文章推荐
windows下安装python paramiko模块的代码
Feb 10 Python
在Python程序中进行文件读取和写入操作的教程
Apr 28 Python
Python中内置的日志模块logging用法详解
Jul 12 Python
深入探究Django中的Session与Cookie
Jul 30 Python
Python2.7编程中SQLite3基本操作方法示例
Aug 09 Python
python实现Excel文件转换为TXT文件
Apr 28 Python
Python语言进阶知识点总结
May 28 Python
解决python3 requests headers参数不能有中文的问题
Aug 21 Python
Python根据服务获取端口号的方法
Sep 25 Python
Django通用类视图实现忘记密码重置密码功能示例
Dec 17 Python
python面向对象之类属性和类方法案例分析
Dec 30 Python
Python3标准库之dbm UNIX键-值数据库问题
Mar 24 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异步执行的详解
2013/06/03 PHP
PHP根据传入参数合并多个JS和CSS文件的简单实现
2014/06/13 PHP
PHP防止注入攻击实例分析
2014/11/03 PHP
js+php实现静态页面实时调用用户登陆状态的方法
2015/01/04 PHP
PHP 生成N个不重复的随机数
2015/01/21 PHP
浅析php设计模式之数据对象映射模式
2016/03/03 PHP
CI映射(加载)数据到view层的方法
2016/03/28 PHP
PHP实现字符串的全排列详解
2019/04/24 PHP
jquery实现动态画圆
2014/12/04 Javascript
node中socket.io的事件使用详解
2014/12/15 Javascript
jQuery自动添加表单项的方法
2015/07/13 Javascript
理解javascript中Map代替循环
2016/02/26 Javascript
jQuery使用模式窗口实现在主页面和子页面中互相传值的方法
2016/03/01 Javascript
angularjs中使用ng-bind-html和ng-include的实例
2017/04/28 Javascript
JS获取当前地理位置的方法
2017/10/25 Javascript
layer.open弹层查看缩略图的原图,自适应大小的实例
2019/09/05 Javascript
uni-app实现获取验证码倒计时功能
2020/11/01 Javascript
vue中h5端打开app(判断是安卓还是苹果)
2021/02/26 Vue.js
[01:31:22]DOTA2-DPC中国联赛定级赛 LBZS vs Magma BO3第二场 1月10日
2021/03/11 DOTA
Python基础学习之常见的内建函数整理
2017/09/06 Python
Django框架登录加上验证码校验实现验证功能示例
2019/05/23 Python
如何基于python测量代码运行时间
2019/12/25 Python
Python中使用filter过滤列表的一个小技巧分享
2020/05/02 Python
python如何用matplotlib创建三维图表
2021/01/26 Python
美津浓美国官网:Mizuno美国
2018/08/07 全球购物
三八妇女节演讲稿
2014/05/27 职场文书
三严三实对照检查材料
2014/08/25 职场文书
2014学习优秀共产党员先进事迹思想汇报
2014/09/14 职场文书
乔迁之喜答谢词
2015/01/05 职场文书
实习协议书
2015/01/27 职场文书
2015年社区工作总结
2015/04/08 职场文书
未婚证明范本
2015/06/15 职场文书
2019军训心得体会
2019/06/27 职场文书
人为什么会“幸灾乐祸”?
2019/08/06 职场文书
数据库的高级查询六:表连接查询:外连接(左外连接,右外连接,UNION关键字,连接中ON与WHERE的不同)
2021/04/05 MySQL
python爬取某网站原图作为壁纸
2021/06/02 Python