LinuxEye - Linux系统教程

LinuxEye - Linux系统教程

当前位置: 主页 > 脚本编程 >

Python使用os.walk递归遍历

时间:2013-06-17 21:37来源:wubiaoblog.com/archives/572 编辑:admin 点击:
使用 Python 的os.walk递归遍历目录 #coding:utf8利用os.walk递归遍历指定目录下的所有文件,递归的遍历出所有子文件夹中的文件。目录可以随意指定,作为参数传递,本测试遍历目录D:\Pytho
使用Python的os.walk递归遍历目录
#coding:utf8

"""
利用os.walk递归遍历指定目录下的所有文件,递归的遍历出所有子文件夹中的文件。
目录可以随意指定,作为参数传递,本测试遍历目录“D:\Python27\Tools”。
支持不同平台。
"""
import os

#取得操作系统分隔符,以支持在不同平台上运行
sep=os.path.sep


#先了解下os.walk的使用,将此注释打开运行即可:
"""
#--begin--
def VisitDir(path):
  for a in os.walk(path):
    print a
path="D:" + sep + "Python27" + sep + "Tools"
VisitDir(path)
#--end--
"""

"""
os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])有四个参数:
1>参数top表示需要遍历的目录树的路径。
2>参数topdown的默认值是"True",表示首先返回目录树下的文件,然后在遍历目录树的子目录。Topdown的值为"False"时,则表示先遍历目录树的子目录,返回子目录下的文件,最后返回根目录下的文件。
3>参数onerror的默认值是"None",表示忽略文件遍历时产生的错误.如果不为空,则提供一个自定义函数提示错误信息后继续遍历或抛出异常中止遍历。
4>参数followlinks默认值是False,默认情况下是不会遍历快捷方式的,如果系统支持需要特殊指定。

os.walk方法返回三元组:
dirpath:  目录的路径。
dirnames: dirpath目录下所有子目录列表(不包含"."和"..")。
filenames:dirpath目录下所有非目录文件列表。


上面测试中,打印的结果为:
('D:\\Python27\\Tools', ['i18n', 'pynche', 'Scripts', 'versioncheck', 'webchecker'], ['test.txt'])
('D:\\Python27\\Tools\\i18n', [], ['makelocalealias.py', 'msgfmt.py', 'pygettext.py'])
('D:\\Python27\\Tools\\pynche', ['X'], ['ChipViewer.py', 'ColorDB.py', 'DetailsViewer.py', 'html40colors.txt', 'ListViewer.py', 'Main.py', 'namedcolors.txt', 'pyColorChooser.py', 'pynche.pyw', 'PyncheWidget.py', 'README.txt', 'StripViewer.py', 'Switchboard.py', 'TextViewer.py', 'TypeinViewer.py', 'webcolors.txt', 'websafe.txt', '__init__.py'])
('D:\\Python27\\Tools\\pynche\\X', [], ['rgb.txt', 'xlicense.txt'])
('D:\\Python27\\Tools\\Scripts', [], ['2to3.py', 'analyze_dxp.py', 'byext.py', 'byteyears.py', 'checkappend.py', 'checkpyc.py', 'classfix.py', 'cleanfuture.py', 'combinerefs.py', 'copytime.py', 'crlf.py', 'cvsfiles.py', 'db2pickle.py', 'diff.py', 'dutree.py', 'eptags.py', 'finddiv.py', 'findlinksto.py', 'findnocoding.py', 'find_recursionlimit.py', 'fixcid.py', 'fixdiv.py', 'fixheader.py', 'fixnotice.py', 'fixps.py', 'ftpmirror.py', 'google.py', 'gprof2html.py', 'h2py.py', 'hotshotmain.py', 'ifdef.py', 'lfcr.py', 'linktree.py', 'lll.py', 'logmerge.py', 'mailerdaemon.py', 'md5sum.py', 'methfix.py', 'mkreal.py', 'ndiff.py', 'nm2def.py', 'objgraph.py', 'parseentities.py', 'patchcheck.py', 'pathfix.py', 'pdeps.py', 'pickle2db.py', 'pindent.py', 'ptags.py', 'pydocgui.pyw', 'pysource.py', 'README.txt', 'redemo.py', 'reindent-rst.py', 'reindent.py', 'rgrep.py', 'serve.py', 'setup.py', 'suff.py', 'svneol.py', 'texcheck.py', 'texi2html.py', 'treesync.py', 'untabify.py', 'which.py', 'win_add2path.py', 'xxci.py'])
('D:\\Python27\\Tools\\versioncheck', [], ['checkversions.py', 'pyversioncheck.py', 'README.txt', '_checkversion.py'])
('D:\\Python27\\Tools\\webchecker', [], ['README.txt', 'tktools.py', 'wcgui.py', 'wcmac.py', 'webchecker.py', 'websucker.py', 'wsgui.py'])

一切尽在掌握之中。 ^_^
"""

#现在实现需求,避免干扰,可将上面测试os.walk的代码注释掉或者删掉。
"""
说明:
为凸显层次感,目录或文件对比父目录缩进一个tab,也就是四个空格,以此类推。
变量space表示缩进的数量。
通过计算文件或目录的路径分隔符的个数,来判断目录或文件的层级。
变量counts记录传进来的参数path路径分隔符的个数。
如果传递进来的path结尾包含分隔符,代码中会把结尾的分隔符去掉,以免影响缩进的效果。
"""
def listDir(path):
  if path.endswith(sep):
    path = path[0:-1]
  counts = len(path.split(sep))
  for dirpath, dirnames, filenames in os.walk(path):
    space = "    " * (len(dirpath.split(sep)) - counts)
    print space + dirpath
    for filename in filenames:
      print space + "    " + os.path.join(filename)
path="D:" + sep + "Python27" + sep + "Tools" + sep
listDir(path)

"""
打印结果如下:
D:\Python27\Tools
    test.txt
    D:\Python27\Tools\i18n
        makelocalealias.py
        msgfmt.py
        pygettext.py
    D:\Python27\Tools\pynche
        ChipViewer.py
        ColorDB.py
        DetailsViewer.py
        html40colors.txt
        ListViewer.py
        Main.py
        namedcolors.txt
        pyColorChooser.py
        pynche.pyw
        PyncheWidget.py
        README.txt
        StripViewer.py
        Switchboard.py
        TextViewer.py
        TypeinViewer.py
        webcolors.txt
        websafe.txt
        __init__.py
        D:\Python27\Tools\pynche\X
            rgb.txt
            xlicense.txt
    D:\Python27\Tools\Scripts
        2to3.py
        analyze_dxp.py
        byext.py
        byteyears.py
        checkappend.py
        checkpyc.py
        classfix.py
        cleanfuture.py
        combinerefs.py
        copytime.py
        crlf.py
        cvsfiles.py
        db2pickle.py
        diff.py
        dutree.py
        eptags.py
        finddiv.py
        findlinksto.py
        findnocoding.py
        find_recursionlimit.py
        fixcid.py
        fixdiv.py
        fixheader.py
        fixnotice.py
        fixps.py
        ftpmirror.py
        google.py
        gprof2html.py
        h2py.py
        hotshotmain.py
        ifdef.py
        lfcr.py
        linktree.py
        lll.py
        logmerge.py
        mailerdaemon.py
        md5sum.py
        methfix.py
        mkreal.py
        ndiff.py
        nm2def.py
        objgraph.py
        parseentities.py
        patchcheck.py
        pathfix.py
        pdeps.py
        pickle2db.py
        pindent.py
        ptags.py
        pydocgui.pyw
        pysource.py
        README.txt
        redemo.py
        reindent-rst.py
        reindent.py
        rgrep.py
        serve.py
        setup.py
        suff.py
        svneol.py
        texcheck.py
        texi2html.py
        treesync.py
        untabify.py
        which.py
        win_add2path.py
        xxci.py
    D:\Python27\Tools\versioncheck
        checkversions.py
        pyversioncheck.py
        README.txt
        _checkversion.py
    D:\Python27\Tools\webchecker
        README.txt
        tktools.py
        wcgui.py
        wcmac.py
        webchecker.py
        websucker.py
        wsgui.py

"""

转载请保留固定链接: https://linuxeye.com/program/1770.html

------分隔线----------------------------
标签:Pythonos.walk递归遍历
栏目列表
推荐内容