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数据抓取分析的示例代码(python + mongodb)
Dec 25 Python
Django中间件实现拦截器的方法
Jun 01 Python
Python实现基于KNN算法的笔迹识别功能详解
Jul 09 Python
Python-copy()与deepcopy()区别详解
Jul 12 Python
pymysql模块的操作实例
Dec 17 Python
Python模块的制作方法实例分析
Dec 21 Python
谈谈Python:为什么类中的私有属性可以在外部赋值并访问
Mar 05 Python
python使用paramiko实现ssh的功能详解
Mar 06 Python
基于python实现把json数据转换成Excel表格
May 07 Python
Python面向对象多态实现原理及代码实例
Sep 16 Python
PyCharm+Miniconda3安装配置教程详解
Feb 16 Python
python自动生成sql语句的脚本
Feb 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 JSON 数据解析代码
2010/05/26 PHP
PHP对接微信公众平台消息接口开发流程教程
2014/03/25 PHP
nginx+thinkphp下解决不支持pathinfo模式
2015/07/01 PHP
php正则表达式获取内容所有链接
2015/07/24 PHP
PHP+jQuery+Ajax实现分页效果 jPaginate插件的应用
2015/10/09 PHP
js导出table到excel同时兼容FF和IE示例
2013/09/03 Javascript
深入理解JavaScript系列(19):求值策略(Evaluation strategy)详解
2015/03/05 Javascript
浅谈javascript的Array.prototype.slice.call
2015/08/31 Javascript
使用jQuery监听DOM元素大小变化
2016/02/24 Javascript
vue2实现可复用的轮播图carousel组件详解
2017/11/27 Javascript
浅谈React中组件间抽象
2018/01/27 Javascript
详解JavaScript中的数组合并方法和对象合并方法
2018/05/11 Javascript
Vue无限滑动周选择日期的组件的示例代码
2018/07/18 Javascript
CryptoJS中AES实现前后端通用加解密技术
2018/12/18 Javascript
JavaScript设计模式之观察者模式实例详解
2019/01/16 Javascript
jQuery实现滑动星星评分效果(每日分享)
2019/11/13 jQuery
微信小程序图片右边加两行文字的代码
2020/04/23 Javascript
Element-UI 使用el-row 分栏布局的教程
2020/10/26 Javascript
[01:27:44]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster BO3 第一场 1月24日
2021/03/11 DOTA
Python中用sleep()方法操作时间的教程
2015/05/22 Python
使用pyecharts在jupyter notebook上绘图
2020/04/23 Python
python pands实现execl转csv 并修改csv指定列的方法
2018/12/12 Python
Django之模板层的实现代码
2019/09/09 Python
Python 3.9的到来到底是意味着什么
2020/10/14 Python
详解Django中异步任务之django-celery
2020/11/05 Python
雅诗兰黛旗下专业男士保养领导品牌:Lab Series
2017/05/15 全球购物
JAKO-O德国野酷台湾站:德国首屈一指的婴幼童用品品牌
2019/01/14 全球购物
机电一体化专业应届本科生求职信
2013/09/27 职场文书
前台文员个人求职信范文
2014/01/05 职场文书
初中学生期末评语
2014/04/24 职场文书
项目经理任命书内容
2014/06/06 职场文书
企业战略合作意向书
2015/05/08 职场文书
2015年电教工作总结
2015/05/26 职场文书
2019最新婚庆对联集锦!
2019/07/10 职场文书
python之PySide2安装使用及QT Designer UI设计案例教程
2021/07/26 Python
详解Vue项目的打包方式(生成dist文件)
2022/01/18 Vue.js