python递归打印路径

我们要用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()

你可能感兴趣的:(python,python,path,递归)