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中的类学习笔记
Sep 23 Python
python实现的文件夹清理程序分享
Nov 22 Python
详解Python的单元测试
Apr 28 Python
TensorFlow实现MLP多层感知机模型
Mar 09 Python
APIStar:一个专为Python3设计的API框架
Sep 26 Python
Python内置方法实现字符串的秘钥加解密(推荐)
Dec 09 Python
Django项目使用ckeditor详解(不使用admin)
Dec 17 Python
Python多进程multiprocessing、进程池用法实例分析
Mar 24 Python
对python中各个response的使用说明
Mar 28 Python
使用Python3 poplib模块删除服务器多天前的邮件实现代码
Apr 24 Python
python 代码运行时间获取方式详解
Sep 18 Python
pytorch 如何使用float64训练
May 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
smarty 原来也不过如此~~呵呵
2006/11/25 PHP
PHP读取目录下所有文件的代码
2008/01/07 PHP
php抽奖小程序的实现代码
2013/06/18 PHP
PHP exif扩展方法开启详解
2014/07/28 PHP
php array_keys 返回数组的键名
2016/10/25 PHP
用Greasemonkey 脚本收藏网站会员信息到本地
2009/10/26 Javascript
DD_belatedPNG,IE6下PNG透明解决方案(国外)
2010/12/06 Javascript
js有关元素内容操作小结
2011/12/20 Javascript
使用JQuery快速实现Tab的AJAX动态载入(实例讲解)
2013/12/11 Javascript
js实现星星打分效果的方法
2020/07/05 Javascript
在Javascript中处理数组之toSource()方法的使用
2015/06/09 Javascript
JavaScript中使用Math.floor()方法对数字取整
2015/06/15 Javascript
浅析JavaScript中var that=this
2017/02/17 Javascript
Bootstrap Tree View简单而优雅的树结构组件实例解析
2017/06/15 Javascript
详解React 在服务端渲染的实现
2017/11/16 Javascript
jQuery创建及操作xml格式数据示例
2018/05/26 jQuery
浅析TypeScript 命名空间
2020/03/19 Javascript
JavaScript实现轮播图效果
2020/10/30 Javascript
Tensorflow简单验证码识别应用
2017/05/25 Python
python队列通信:rabbitMQ的使用(实例讲解)
2017/12/22 Python
Python 最大概率法进行汉语切分的方法
2018/12/14 Python
对Python 语音识别框架详解
2018/12/24 Python
python 格式化输出百分号的方法
2019/01/20 Python
django 单表操作实例详解
2019/07/30 Python
python中必要的名词解释
2019/11/20 Python
python 回溯法模板详解
2020/02/26 Python
在python中利用dict转json按输入顺序输出内容方式
2020/02/27 Python
Django 404、500页面全局配置知识点详解
2020/03/10 Python
Python selenium爬虫实现定时任务过程解析
2020/06/08 Python
英国游戏机和游戏购物网站:365games.co.uk
2018/06/18 全球购物
给学校的建议书范文
2014/05/15 职场文书
大专应届毕业生求职信
2014/07/15 职场文书
2016年感恩教师节活动总结
2016/04/01 职场文书
python操作xlsx格式文件并读取
2021/06/02 Python
《最终幻想14》6.01版本4月5日推出 追加新任务新道具
2022/04/03 其他游戏
Python 使用 Frame tkraise() 方法在 Tkinter 应用程序中的Frame之间切换
2022/04/24 Python