Python遍历目录中的所有文件的方法

 更新时间:2016年07月08日 16:42:23   作者:linda1000  
Pyhton中我们一般使用os.walk生成器来获取文件夹中的所有文件,这里我们就来详细看一下Python遍历目录中的所有文件的方法,包括一个进阶的利用fnmatch模块进行匹配的方法:

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枚举类型的相关知识,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • python实现支付宝当面付(扫码支付)功能

    python实现支付宝当面付(扫码支付)功能

    这篇文章主要为大家详细介绍了python实现支付宝当面付,扫码支付功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • 使用python进行图像分类的实现步骤

    使用python进行图像分类的实现步骤

    图像分类与识别是计算机视觉中的重要任务,它可以帮助我们自动识别图像中的对象、场景或者特征,在本文中,我们将介绍使用python进行图像分类的实现步骤,感兴趣的小伙伴跟着小编一起来看看吧
    2024-09-09
  • Python中一些深不见底的“坑”

    Python中一些深不见底的“坑”

    这篇文章主要给大家介绍了关于Python中一些深不见底的“坑”,文中通过示例代码介绍的非常详细,对大家学习或者使用Python具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-06-06
  • Jupyter notebook中5个有趣的魔法命令分享

    Jupyter notebook中5个有趣的魔法命令分享

    众​所周知,Jupyter notebook是一个交互式的Python shell,也就是IPython的封装版,非常适合用来进行数据分析和机器学习。本文为大家整理了Jupyter notebook中5个有趣的魔法命令,感兴趣的可以了解一下
    2022-07-07
  • Python大数据用Numpy Array的原因解读

    Python大数据用Numpy Array的原因解读

    一个Numpy数组由许多值组成,所有值的类型是相同的,Numpy 是Python科学计算的一个核心模块,本文重点给大家介绍Python大数据Numpy Array的相关知识,感兴趣的朋友一起看看吧
    2022-02-02
  • 使用Pandas和Matplotlib进行数据清洗与可视化的实现步骤

    使用Pandas和Matplotlib进行数据清洗与可视化的实现步骤

    在数据科学领域,数据清洗和可视化是构建数据驱动解决方案的重要步骤,本文将详细介绍如何使用Pandas进行数据清洗,并结合Matplotlib进行可视化,文章通过实际代码示例讲解的非常详细,需要的朋友可以参考下
    2024-08-08
  • Python函数必须先定义,后调用说明(函数调用函数例外)

    Python函数必须先定义,后调用说明(函数调用函数例外)

    这篇文章主要介绍了Python函数必须先定义,后调用说明(函数调用函数例外),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • Python实现按照指定要求逆序输出一个数字的方法

    Python实现按照指定要求逆序输出一个数字的方法

    这篇文章主要介绍了Python实现按照指定要求逆序输出一个数字的方法,涉及Python针对字符串的遍历、判断、输出等相关操作技巧,需要的朋友可以参考下
    2018-04-04
  • Python压缩包处理模块zipfile和py7zr操作代码

    Python压缩包处理模块zipfile和py7zr操作代码

    目前对文件的压缩和解压缩比较常用的格式就是zip格式和7z格式,这篇文章主要介绍了Python压缩包处理模块zipfile和py7zr,需要的朋友可以参考下
    2022-06-06

最新评论