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登录QQ邮箱发信的实现代码
Feb 10 Python
实例讲解Python中的私有属性
Aug 21 Python
python 重定向获取真实url的方法
May 11 Python
python中使用iterrows()对dataframe进行遍历的实例
Jun 09 Python
python+unittest+requests实现接口自动化的方法
Nov 29 Python
Python实现繁?转为简体的方法示例
Dec 18 Python
PyCharm 创建指定版本的 Django(超详图解教程)
Jun 18 Python
Python编写打字训练小程序
Sep 26 Python
Python使用Opencv实现图像特征检测与匹配的方法
Oct 30 Python
Tkinter中复选菜单是否被选中的判断与设置方式
Mar 04 Python
python Socket网络编程实现C/S模式和P2P
Jun 22 Python
python实现学生信息管理系统(精简版)
Nov 27 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
ADODB的数据库封包程序库
2006/12/31 PHP
如何使用php绘制在图片上的正余弦曲线
2013/06/08 PHP
codeigniter集成ucenter1.6双向通信的解决办法
2014/06/12 PHP
编写PHP脚本过滤用户上传的图片
2015/07/03 PHP
PHP获取表单数据与HTML嵌入PHP脚本的实现
2017/02/09 PHP
form自动提交实例讲解
2017/07/10 PHP
Laravel监听数据库访问,打印SQL的例子
2019/10/24 PHP
php利用ZipArchive类操作文件的实例
2020/01/21 PHP
轻松创建nodejs服务器(3):代码模块化
2014/12/18 NodeJs
对于jQuery性能的一些优化建议
2015/08/13 Javascript
jquery实现通用的内容渐显Tab选项卡效果
2015/09/07 Javascript
基于JavaScript实现窗口拖动效果
2017/01/18 Javascript
nodejs操作mysql实现增删改查的实例
2017/05/28 NodeJs
JavaScript实现打印星型金字塔功能实例分析
2017/09/27 Javascript
three.js中3D视野的缩放实现代码
2017/11/16 Javascript
Angular实现的敏感文字自动过滤与提示功能示例
2017/12/29 Javascript
vue实现点击选中,其他的不选中方法
2018/09/05 Javascript
详解Vue iview IE浏览器不兼容报错(Iview Bable polyfill)
2019/01/07 Javascript
vue实现多条件和模糊搜索功能
2019/05/28 Javascript
浅谈webpack构建工具配置和常用插件总结
2020/05/11 Javascript
小程序自定义弹框效果
2020/11/16 Javascript
[33:17]OG vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[41:52]DOTA2-DPC中国联赛 正赛 CDEC vs Dynasty BO3 第二场 2月22日
2021/03/11 DOTA
分享Python字符串关键点
2015/12/13 Python
Python中字符串的修改及传参详解
2016/11/30 Python
python timestamp和datetime之间转换详解
2017/12/11 Python
Python如何使用BeautifulSoup爬取网页信息
2019/11/26 Python
django formset实现数据表的批量操作的示例代码
2019/12/06 Python
用Python去除图像的黑色或白色背景实例
2019/12/12 Python
python实现拼图小游戏
2020/02/22 Python
Python关于拓扑排序知识点讲解
2021/01/04 Python
一款超酷的js+css3实现的3D标签云特效兼容ie7/8/9
2013/11/18 HTML / CSS
质检部职责
2013/12/28 职场文书
社区志愿者心得体会
2014/01/03 职场文书
妇女工作先进事迹
2014/08/17 职场文书
浅谈JavaScript作用域
2021/12/06 Javascript