Chinaunix首页 | 论坛 | 博客
  • 博客访问: 117868
  • 博文数量: 23
  • 博客积分: 495
  • 博客等级: 下士
  • 技术积分: 252
  • 用 户 组: 普通用户
  • 注册时间: 2011-08-05 20:44
文章分类
文章存档

2011年(23)

分类: Python/Ruby

2011-08-14 23:15:35

Python实现递归遍历指定文件目录(startdir),从而找到所有与指定的文件或目录(target)名相同的文件或目录的绝对路径。

scandir.py :
  1. #! /usr/bin/python
  2. # filename : scandir.py
  3. # author : Jesse
  4. # update : 2011/08/15 10:16

  5. import os

  6. def scandir(startdir, target) :
  7.     os.chdir(startdir)
  8.     for obj in os.listdir(os.curdir) :
  9.         if obj == target :
  10.             print os.getcwd() + os.sep + obj
  11.         if os.path.isdir(obj) :
  12.             scandir(obj, target)
  13.             os.chdir(os.pardir) #!!!

  14. startdir = raw_input('Please input startdir: ')
  15. target = raw_input('Please input target: ')
  16. scandir(startdir, target)

关于该程序的一点说明:
1. 函数scandir的形参target可以是目录名也可以是文件名。
2. 函数chdir的作用是切换到指定目录,该参数必须是有效的且有访问权限的相对路径或绝对路径。
3. 函数的第五行,使用getcwd函数也是为了取得当前绝对路径。
4. 加号作为字符串的连接符。os.sep根据你的操作系统给出目录分隔符,在GNU/Linux和UNIX上它的返回值是'/',在windows上它的返回值是'\\',在Mac OS上是‘:’,使用os.sep而不直接使用字符,会提高程序的可移植性。
5. 递归调用后,一定不能忘了os.chdir(os.pardir),返回上层目录(即父目录)。

重要:
1. 理解for中的两个并列的if语句,并列是为了解决目标是文件夹时,该目标文件夹中包含符合要求的文件夹。
2. 如果指定目录中存在访问受限的文件或文件夹,该程序会失败,返回无权访问信息。
阅读(14386) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~