Python生成目录树思路与代码

发布时间:2019-08-11编辑:脚本学堂
本文介绍了python生成目录树的实现思路与代码,用python实现目录树生成很方便,有需要的朋友参考下。

实现思路:通过os.listdir()列举出目录下所有的文件和子目录,如果是文件则打印输出,如果是子目录,则递归获取该子目录的文件信息。

目录树生成的脚本代码:
 

复制代码 代码示例:
#!/usr/bin/env python
#coding=utf-8
 
import os
import sys
 
class dir(object): 
    def __init__(self): 
        self.SPACE = "" 
        self.list = []
        self.size = 0
    def getCount(self, url):
        files = os.listdir(url)
        count = 0;
        for file in files:
            myfile = url + "/" + file
            if os.path.isfile(myfile):
                count = count + 1
        return count
    def getDirList(self, url): 
        files = os.listdir(url) 
        fileNum = self.getCount(url)
        tmpNum = 0
        for file in files: 
            myfile = url + "/" + file 
            try:
                self.size += os.path.getsize(myfile) 
            except Exception, e:
                pass
            if os.path.isfile(myfile): 
                tmpNum = tmpNum +1
                if (tmpNum != fileNum):
                    self.list.append(str(self.SPACE) + " |--" + file + "n")
                else:
                    self.list.append(str(self.SPACE) + " i--" + file + "n")
            if os.path.isdir(myfile): 
                self.list.append(str(self.SPACE) + " |--" + file + "n") 
                # change into sub directory
                self.SPACE = self.SPACE + " |  " 
                self.getDirList(myfile) 
                # if iterator of sub directory is finished, reduce "艩艢  " 
                self.SPACE = self.SPACE[:-4] 
        return self.list 
    def writeList(self, url): 
        f = open(url, 'w') 
        f.writelines(self.list) 
        print "ok" 
        f.close() 
if __name__ == '__main__': 
    d = dir() 
    d.getDirList(sys.argv[1]) # input directory
    #d.writeList("1.txt") # write to file
    #print '%s' % (''.join(d.list))
    print ''.join(d.list)
    print '%s total size : %d bytes' % (sys.argv[1],  d.size)

脚本结果:
 

|--myconfig
 |--test
 |   i--11df.tt
 i--myconfig.tar0
 
/usr/local/etc/ total size : 14527 bytes