zoukankan      html  css  js  c++  java
  • Python 用 os.walk 遍历目录

    今天第一次进行 文件遍历,自己递归写的时候还调试了好久,(主要因为分隔符号的问题),后来发现了os.walk方法,就忍不住和大家分享下.

    先看下代码:


    import os

    for i in os.walk('c:'+os.sep+'ant'):
        print i[1] 

    下面是输出:

    c:ant
    c:antin
    c:antdocs
    c:antdocsant2
    c:antdocsantlibs
    c:antdocsantlibsantunit
    c:antdocsantlibscompress
    c:antdocsantlibsdotnet
    c:antdocsantlibsprops
    c:antdocsantlibssvn
    c:antdocsimages
    c:antdocsmanual
    c:antdocsmanualapi
    c:antdocsmanualapiorg
    c:antdocsmanualapiorgapache
    c:antdocsmanualapiorgapache ools
    c:antdocsmanualapiorgapache oolsant
    c:antdocsmanualapiorgapache oolsantdispatch
    c:antdocsmanualapiorgapache oolsantfilters

    后面还有很长.

    如果不使用这个方法,遍历同样能达到效果.不过使用 os.walk 方便很多了.这个方法返回的是一个三元tupple(dirpath, dirnames, filenames),

    其中第一个为起始路径,

    第二个为起始路径下的文件夹,

    第三个是起始路径下的文件.
    dirpath是一个string,代表目录的路径,

    dirnames是一个list,包含了dirpath下所有子目录的名字,

    filenames是一个list,包含了非目录文件的名字.这些名字不包含路径信息,如果需要得到全路径,需要使用 os.path.join(dirpath, name).

    下面是可以看到 os.walk 方法返回的内容.

    代码:

    import os

    for i in os.walk('c:'+os.sep+'ant'):
        print i
        
    输出:

    ('c:\ant', ['bin', 'docs', 'etc', 'lib', 'Project'], ['fetch.xml', 'get-m2.xml', 'INSTALL', 'KEYS', 'LICENSE', 'NOTICE', 'README', 'WHATSNEW'])
    ('c:\ant\bin', [], ['ant', 'ant.bat', 'ant.cmd', 'antenv.cmd', 'antRun', 'antRun.bat', 'antRun.pl', 'complete-ant-cmd.pl', 'envset.cmd', 'lcp.bat', 'runant.pl', 'runant.py', 'runrc.cmd'])
    ('c:\ant\docs', ['ant2', 'antlibs', 'images', 'manual', 'projects', 'slides', 'webtest'], ['antnews.html', 'ant_in_anger.html', 'ant_task_guidelines.html', 'appendix_e.pdf', 'breadcrumbs.js', 'bugs.html', 'bylaws.html', 'contributors.html', 'external.html', 'faq.html', 'favicon.ico', 'index.html', 'legal.html', 'LICENSE', 'license.html', 'mail.html', 'mission.html', 'nightlies.html', 'page.css', 'problems.html', 'projects.html', 'resources.html', 'svn.html'])
    ('c:\ant\docs\ant2', [], ['actionlist.html', 'features.html', 'FunctionalRequirements.html', 'original-specification.html', 'requested-features.html', 'requested-features.txt', 'VFS.txt'])
    ('c:\ant\docs\antlibs', ['antunit', 'compress', 'dotnet', 'props', 'svn'], ['bindownload.cgi', 'bindownload.html', 'charter.html', 'index.html', 'proper.html', 'sandbox.html', 'srcdownload.cgi', 'srcdownload.html'])
    ('c:\ant\docs\antlibs\antunit', [], ['index.html'])
    ('c:\ant\docs\antlibs\compress', [], ['index.html'])
    ('c:\ant\docs\antlibs\dotnet', [], ['index.html'])
    ('c:\ant\docs\antlibs\props', [], ['index.html'])

    ...

    当然后面还有很长了.

    有了这个函数无论是遍历文件夹,还是遍历文件都很方便.

    下面是我是自己用递归实现的遍历文件方法.

    代码:

    def listdir(leval,path):
        for i in os.listdir(path):
            print('|  '*(leval + 1) + i) 
            if os.path.isdir(path+i):
                listdir(leval+1, path+i)

    path = 'c:'+os.sep+'ant'

    #或者直接 path='C:/ant' 
    print(path+os.sep)
    listdir(0, path+os.sep)

    下面是输出:

    c:ant
    |  bin
    |  |  ant
    |  |  ant.bat
    |  |  ant.cmd
    |  |  antenv.cmd
    |  |  antRun
    |  |  antRun.bat
    |  |  antRun.pl
    |  |  complete-ant-cmd.pl
    |  |  envset.cmd
    |  |  lcp.bat
    |  |  runant.pl
    |  |  runant.py
    |  |  runrc.cmd
    |  docs
    |  |  ant2
    |  |  antlibs
    |  |  antnews.html
    |  |  ant_in_anger.html
    |  |  ant_task_guidelines.html
    |  |  appendix_e.pdf
    |  |  breadcrumbs.js
    |  |  bugs.html
    |  |  bylaws.html
    |  |  contributors.html
    |  |  external.html
    |  |  faq.html
    |  |  favicon.ico
    |  |  images
    |  |  index.html
    |  |  legal.html
    |  |  LICENSE
    |  |  license.html
    |  |  mail.html
    |  |  manual
    |  |  mission.html
    |  |  nightlies.html
    |  |  page.css
    |  |  problems.html
    |  |  projects
    |  |  projects.html
    |  |  resources.html
    |  |  slides
    |  |  svn.html
    |  |  webtest
    |  etc
    |  |  ant-bootstrap.jar
    |  |  changelog.xsl
    |  |  checkstyle
    |  |  coverage-frames.xsl
    |  |  jdepend-frames.xsl
    |  |  jdepend.xsl
    |  |  junit-frames-xalan1.xsl
    |  |  junit-frames.xsl
    |  |  junit-noframes.xsl
    |  |  log.xsl
    |  |  maudit-frames.xsl
    |  |  mmetrics-frames.xsl
    |  |  tagdiff.xsl
    |  fetch.xml
    |  get-m2.xml
    |  INSTALL
    |  KEYS
    |  lib
    |  |  ant-1.8.0.pom
    |  |  ant-1.8.0.pom.md5
    |  |  ant-1.8.0.pom.sha1
    |  |  ant-1.8.0.pom.sha512

    ..

    如果只想得到文件夹,而不要文件,把要做的事情放到

    if os.path.isdir(path+i):

    里面就好了,比如: print()

    O(∩_∩)O~

  • 相关阅读:
    爬虫学习
    微软命令行安装第三方库
    Python复习(拾遗)3
    Python拾遗2
    Python复习(拾遗)
    python练习 自动绘图
    多分支结构
    turtle
    Python练习
    随便写点…
  • 原文地址:https://www.cnblogs.com/rrxc/p/4092828.html
Copyright © 2011-2022 走看看