python中os模块的常见处理函数

os.work函数:


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()




os.path.split(path):



实际上,该函数的分割并不智能,它仅仅是以 "PATH" 中最后一个 '/' 作为分隔符,分隔后,将索引为0的视为目录(路径),将索引为1的视为文件名,如:

>>> import os
>>> os.path.split('C:/soft/python/test.py')
('C:/soft/python', 'test.py')



os.path.join(root, file):

等同其余的join函数



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值