转自 http://alanland.iteye.com/blog/612459

via @alanland

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

先看下代码:

import os

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

下面是输出:

c:\ant
c:\ant\bin
c:\ant\docs
c:\ant\docs\ant2
c:\ant\docs\antlibs
c:\ant\docs\antlibs\antunit
c:\ant\docs\antlibs\compress
c:\ant\docs\antlibs\dotnet
c:\ant\docs\antlibs\props
c:\ant\docs\antlibs\svn
c:\ant\docs\images
c:\ant\docs\manual
c:\ant\docs\manual\api
c:\ant\docs\manual\api\org
c:\ant\docs\manual\api\org\apache
c:\ant\docs\manual\api\org\apache\tools
c:\ant\docs\manual\api\org\apache\tools\ant
c:\ant\docs\manual\api\org\apache\tools\ant\dispatch
c:\ant\docs\manual\api\org\apache\tools\ant\filters

后面还有很长.

如果不使用这个方法,遍历同样能达到效果.不过使用 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 os.walk()遍历文件夹的更多相关文章

  1. python os.walk()遍历

    os.walk()遍历 import os p='/bin' #设定一个路径 for i in os.walk(p): #返回一个元组 print (i) # i[0]是路径 i[1]是文件夹 i[2 ...

  2. Python os.walk() 遍历出当前目录下的文件夹和文件

    os.walk目录遍历 os.walk的参数如下: os.walk(top, topdown=True, onerror=None, followlinks=False) 其中: - top是要遍历的 ...

  3. Python OS导入一个文件夹所有文件

    import os path = 'F:/save_file/seminarseries/' for root, dirs, files in os.walk(path): print(root) 这 ...

  4. Python os.walk文件遍历用法【转】

    python中os.walk是一个简单易用的文件.目录遍历器,可以帮助我们高效的处理文件.目录方面的事情. 1.载入 要使用os.walk,首先要载入该函数 可以使用以下两种方法 import os ...

  5. Python os.walk文件遍历

    os.walk(top, topdown=True, onerror=None, followlinks=False) 可以得到一个三元tupple(dirpath, dirnames, filena ...

  6. python笔记4-遍历文件夹目录os.walk()

    前言 如何遍历查找出某个文件夹内所有的子文件呢?并且找出某个后缀的所有文件 walk功能简介 1.os.walk() 方法用于通过在目录树种游走输出在目录中的文件名,向上或者向下. 2.walk()方 ...

  7. python 遍历文件夹 文件

    python 遍历文件夹 文件   import os import os.path rootdir = "d:\data" # 指明被遍历的文件夹 for parent,dirn ...

  8. python遍历文件夹下的文件

    在读文件的时候往往需要遍历文件夹,python的os.path包含了很多文件.文件夹操作的方法.下面列出: os.path.abspath(path) #返回绝对路径 os.path.basename ...

  9. Python 用 os.walk 遍历目录

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

随机推荐

  1. web.xml的学习

    web.xml 文件提供有关包含 Web 应用程序的 Web 组件的配置和部署信息. Java Servlet 规范根据 XML 模式文档来定义 web.xml 部署描述符文件.为了获取向后兼容性,W ...

  2. C#中的反射解析及使用(转)

    原文:https://cloud.tencent.com/developer/article/1129356 1.对C#反射机制的理解 2.概念理解后,必须找到方法去完成,给出管理的主要语法 3.最终 ...

  3. Python之Beautiful Soup的用法

    1. Beautiful Soup的简介 简单来说,Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据.官方解释如下: Beautiful Soup提供一些简单的.pyt ...

  4. navicat premium 破解版

    下载链接:https://pan.baidu.com/s/1oNwtr2hdUN9F452xkji0aQ

  5. storybook配置之基本配置和webpack配置

    默认配置 Storybook有一个默认的适合(suits)大型项目开发的webpack配置,假如你使用react app,他类似于创建一个react app的配置,并经过调整(tweaked ),使其 ...

  6. 关于ip通信学习感想

    在没有接触过ip通信之前,我对于网络的认识非常浅薄,比如上网只需要交钱和一根网线就可以上网,但自从上了第一节课之后,感觉打开了新世界的大门.我国的移动通信公司也没有权利单独分配独有的ip地址,还要看亚 ...

  7. Arthur and Questions CodeForces - 518E (贪心模拟)

    大意: 给定序列$a$, 某些位置为'?', 求给'?'赋值使得序列$(a_1+a_2+...+a_k,a_2+a_3+...+a_{k+1},...)严格递增, 且$\sum|a_i|$最小. 化简 ...

  8. js 实用小技巧

    https://blog.csdn.net/www93111/article/details/76176771

  9. Goroutine通信与thread in java间的通信

    // This file contains the implementation of Go channels. // Invariants: //  At least one of c.sendq ...

  10. linux 常用指令

    w 指令可以看到目前接入到服务器的用户(终端)history xx 可以查看本用户(本终端)最后执行的xx条指令last 指令可以查看登录的日志grep "str" filName ...