Python的学习(二十七)---- 遍历目录树

Python遍历目录树

 

用python检查一个目录或某个包含子目录的目录树,并根据某种模式迭代所有的文件(可能包括子目录)。

标准文件数遍历生成器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的学习(二十七)---- 遍历目录树)