您的位置:首页 > 运维架构 > Linux

用Python实现Linux tree命令

2015-06-11 16:38 435 查看
早就耳闻python 功能强大,互联网领域运用广泛,Scrapy爬虫框架、OpenStack云存储架构都是用Python实现的。最近下定决心,开始学习Python。先参考网上的demo写一个小例子,实现linux tree命令。

#!/usr/bin/python
import os, sys, string

class XXXTree:
def __init__(self):
pass

def printHelp(self, cmd):
print "Please use the follow cmd"
print "     " + cmd + 'dir'
print "e.g"
print "     " + cmd + "/root/Kedacom_src"

def getTree(self, dir, op):
list = self.getList(dir, 0, op)
treeList = []
#遍历文件列表,进行格式化输出处理,将处理后的元素添加到treeList中
for i in range(1, len(list)):
fullpath = list[i]
filename = os.path.basename(fullpath)

if(fullpath == dir):
treeList.append(fullpath)
continue

path = fullpath.replace(dir, "")
names = path.split('/')
name = "|-- " + names[len(names)-1]
for tmp in range(1, len(names)-1):
name = "    " + name

treeList.append(name)

pos = name.find('&')
if (pos >= 0):
j = i-1
if j >= 0:
name = treeList[j]
if (name[pos] == '&'):
tmp = name.index('|')
name = name[0:tmp] + "`" + name[tmp+1:pos]
treeList[j] = name

for i in range(0, len(treeList)):
print treeList[i]

#递归获取目录下所有的文件,除去隐形文件
def getList(self, dir, layer, op):
list = [ ]
if (layer == 0):list.append(dir)
#对目录下的文件列表进行排序
files = sorted(os.listdir(dir))
for file in files:
if (file[0] == '.'):
continue
file = os.path.join(dir, file)
if os.path.isdir(file):
list.append(file)
list += self.getList(file, layer+1, op)
elif (op == '-d'):
pass
else:
list.append(file)
newfile = file + '&'
pos = list.index(file)
list[pos] = newfile
return list

if (len(sys.argv) < 2):
t = XXXTree()
t.printHelp(sys.argv[0])

else:
t = XXXTree()

dir = None
if (len(sys.argv) == 2):dir = sys.argv[1]

op = None
if (len(sys.argv) == 3):
op = sys.argv[1]
dir = sys.argv[2]

t.getTree(dir, op)


运行结果



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: