#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 |