我们要用os.path.exists(path)检查给定的目录存不存在
print os.path.exists('/') # 返回True
print os.path.exists('/adfdsf') #返回False
接着用os.listdir(path) 这个方法会以列表的方式返回路径中的目录和文件
print os.listdir('/')
#返回一个列表
['.DocumentRevisions-V100', '.DS_Store', '.file', '.fseventsd', '.PKInstallSandboxManager']
循环列表,判断列表中的是文件还是目录
for name in os.listdir('/'):
print os.path.isfile(os.path.join('/', name)), os.path.isdir(os.path.join('/', name))
接下来是完整的代码
import os
import os.path as op
class listByCurisive(object):
def __init__(self, pathname):
#判断路径是否存在 否则引必异常
if not op.exists(pathname):
raise Exception("pathname is not exists")
#决断路径是否是目录 否则引发异常
if not op.isdir(pathname):
raise Exception("pathname is not a directory")
#将构造参数fu值
self.pathname = pathname
def str_level(self, level, isFile=True):
'负责打印空格和 (- 或 *)'
if isFile:
str = ' '*level + '- '
else:
str = ' '*level + '+ '
return str
def print_name(self,_pathname=None, level=1):
# _pathname是None,将self.pathname赋值给它
if _pathname is None:
_pathname = self.pathname
for sub_name in os.listdir(_pathname):
#获取sub_name完整的路径
sub_pathname = op.join(_pathname, sub_name)
if op.isfile(sub_pathname):
#如果是文件打印
print self.str_level(level) + sub_name
elif op.isdir(sub_pathname):
#如果是目录打印目录名,然后递归的调用自己
print self.str_level(level,isFile=False) + sub_name
self.print_name(sub_pathname, level + 1)
else:
#在mac上,有的目录既不是文件,也不是目录,(可能是链接,或者是别的),我没有作深入研究,在此加上这行代码,如不会报错的哦
pass
lst = listByCurisive('/Users/jianglei/python')
lst.print_name()