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根据日期返回星期几的方法
Jul 06 Python
Python中特殊函数集锦
Jul 27 Python
怎样使用Python脚本日志功能
Aug 14 Python
VScode编写第一个Python程序HelloWorld步骤
Apr 06 Python
Django1.9 加载通过ImageField上传的图片方法
May 25 Python
Python中一些深不见底的“坑”
Jun 12 Python
python爬虫 正则表达式解析
Sep 28 Python
python 实现屏幕录制示例
Dec 23 Python
pytorch数据预处理错误的解决
Feb 20 Python
Django跨域请求原理及实现代码
Nov 14 Python
python爬虫爬取某网站视频的示例代码
Feb 20 Python
python常量折叠基础知识点讲解
Feb 28 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
什么是调频(FM)、调幅(AM)、短波(SW)、长波(LW)
2021/03/01 无线电
基于php使用memcache存储session的详解
2013/06/25 PHP
ThinkPHP的L方法使用简介
2014/06/18 PHP
PHP网站建设的流程与步骤分享
2015/09/25 PHP
PHP实现表单提交时去除斜杠的方法
2016/12/26 PHP
Laravel下生成验证码的类
2017/11/15 PHP
PHP切割整数工具类似微信红包金额分配的思路详解
2019/09/18 PHP
判断用户是否在线的代码
2011/03/05 Javascript
可编辑下拉框的2种实现方式
2014/06/13 Javascript
jquery实现漂亮的二级下拉菜单代码
2015/08/26 Javascript
Javascript缓存API
2016/06/14 Javascript
原生js编写基于面向对象的分页组件
2016/12/05 Javascript
JavaScript中匿名函数的递归调用
2017/01/22 Javascript
在使用JSON格式处理数据时应该注意的问题小结
2017/05/20 Javascript
微信小程序开发之好友列表字母列表跳转对应位置
2017/09/26 Javascript
bootstrap模态框弹出和隐藏,动态改变中间内容的实例
2018/08/10 Javascript
vue 公共列表选择组件,引用Vant-UI的样式方式
2020/11/02 Javascript
Python 获取新浪微博的最新公共微博实例分享
2014/07/03 Python
Django中间件工作流程及写法实例代码
2018/02/06 Python
pandas多级分组实现排序的方法
2018/04/20 Python
对TensorFlow中的variables_to_restore函数详解
2018/07/30 Python
深入了解Python枚举类型的相关知识
2019/07/09 Python
Python学习笔记之错误和异常及访问错误消息详解
2019/08/08 Python
python数据库编程 ODBC方式实现通讯录
2020/03/27 Python
用python打开摄像头并把图像传回qq邮箱(Pyinstaller打包)
2020/05/17 Python
python使用多线程+socket实现端口扫描
2020/05/28 Python
Android Q之气泡弹窗的实现示例
2020/06/23 Python
python环境搭建和pycharm的安装配置及汉化详细教程(零基础小白版)
2020/08/19 Python
python中的垃圾回收(GC)机制
2020/09/21 Python
庆七一活动方案
2014/01/25 职场文书
跳蚤市场口号
2014/06/13 职场文书
爱护公共设施的标语
2014/06/24 职场文书
村主任群众路线教育实践活动个人对照检查材料思想汇报
2014/10/01 职场文书
学校法制宣传日活动总结
2014/11/01 职场文书
社区安置帮教工作总结2015
2015/05/20 职场文书
校运会新闻稿
2015/07/17 职场文书