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字符串详细介绍
May 09 Python
Django学习笔记之ORM基础教程
Mar 27 Python
Python基于jieba库进行简单分词及词云功能实现方法
Jun 16 Python
pycharm恢复默认设置或者是替换pycharm的解释器实例
Oct 29 Python
Python+PyQt5实现美剧爬虫可视工具的方法
Apr 25 Python
详解Python 爬取13个旅游城市,告诉你五一大家最爱去哪玩?
May 07 Python
python将字符串转换成json的方法小结
Jul 09 Python
python3 webp转gif格式的实现示例
Dec 10 Python
python numpy矩阵信息说明,shape,size,dtype
May 22 Python
Ubuntu16安装Python3.9的实现步骤
Dec 15 Python
Python3压缩和解压缩实现代码
Mar 01 Python
pytorch 计算Parameter和FLOP的操作
Mar 04 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.ini中文版
2006/10/09 PHP
yiic命令时提示“php.exe”不是内部或外部命令的解决方法
2014/12/18 PHP
php检测url是否存在的方法
2015/04/14 PHP
PHP实现mysqli批量执行多条语句的方法示例
2017/07/22 PHP
php使用fputcsv实现大数据的导出操作详解
2020/02/27 PHP
textContent在Firefox下与innerText等效的属性
2007/05/12 Javascript
window.name代替cookie的实现代码
2010/11/28 Javascript
原生Js实现元素渐隐/渐现(原理为修改元素的css透明度)
2013/06/24 Javascript
公共js在页面底部加载的注意事项介绍
2013/07/18 Javascript
js中传递特殊字符(+,&)的方法
2014/01/16 Javascript
javascript屏蔽右键代码
2014/05/15 Javascript
JavaScript简单修改窗口大小的方法
2015/08/03 Javascript
js中获取时间new Date()的全面介绍
2016/06/20 Javascript
jQuery倒计时代码(超简单)
2017/02/27 Javascript
深入理解Commonjs规范及Node模块实现
2017/05/17 Javascript
详解Vue中watch的高级用法
2018/05/02 Javascript
vue项目webpack中Npm传递参数配置不同域名接口
2018/06/15 Javascript
js逆向解密之网络爬虫
2019/05/30 Javascript
vue安装遇到的5个报错及解决方法
2019/06/12 Javascript
vue实现鼠标移过出现下拉二级菜单功能
2019/12/12 Javascript
使用typescript改造koa开发框架的实现
2020/02/04 Javascript
微信小程序实现日历小功能
2020/11/18 Javascript
在Python的setuptools框架下生成egg的教程
2015/04/13 Python
Python模拟登陆淘宝并统计淘宝消费情况的代码实例分享
2016/07/04 Python
对python程序内存泄漏调试的记录
2018/06/11 Python
基于Python3.6+splinter实现自动抢火车票
2018/09/25 Python
python 搭建简单的http server,可直接post文件的实例
2019/01/03 Python
Python3 执行系统命令并获取实时回显功能
2019/07/09 Python
python基础 range的用法解析
2019/08/23 Python
python3爬取torrent种子链接实例
2020/01/16 Python
世界上最大的铁人三项商店:Tri UK
2020/11/04 全球购物
社会实践感言
2014/01/25 职场文书
软件测试专业推荐信
2014/09/18 职场文书
先进班组事迹材料
2014/12/25 职场文书
PostgreSQL解析URL的方法
2021/08/02 PostgreSQL
简单聊聊Golang中defer预计算参数
2022/03/25 Golang