-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtree.py
82 lines (62 loc) · 1.86 KB
/
tree.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#! /usr/bin/env python
# -- coding: utf-8 --
# vim:fenc=utf-8
# Copyright © 2019 mursalin [email protected]
# Distributed under terms of the MIT license.
import os
import sys
class bcolors:
CYAN = '\033[96m'
HEADER = '\033[95m'
OKBLUE = '\033[94m'
OKGREEN = '\033[92m'
WARNING = '\033[93m'
FAIL = '\033[91m'
ENDC = '\033[0m'
BOLD = '\033[1m'
UNDERLINE = '\033[4m'
def add_files(fname, indent):
return "\n"+indent+fname
def add_directory(dirname, indent):
return "\n"+indent+bcolors.BOLD+bcolors.OKBLUE+dirname+bcolors.ENDC
def tailing_dir(path):
return os.path.basename(os.path.normpath(path))
def n_child():
return "├── "
def last_child():
return "└── "
def level_indent(level,dirflag):
ret=""
for i in range(level):
if dirflag[i]:
ret+="│"+(3*" ")
else:
ret+=" "+(3*" ")
return ret
def get_indent(ind,count,level,dirflag):
if level:
if ind==count-1:
return level_indent(level,dirflag)+last_child()
return level_indent(level,dirflag)+n_child()
if ind==count-1:
return last_child()
return n_child()
def print_tree(name, path, indent,level,dirflag):
listdir = os.listdir(path)
listdir.sort()
count = len(listdir)
result= add_directory(name,indent)
for ind,fname in enumerate(listdir):
if os.path.isdir(os.path.join(path,fname)):
new_indent = " "+get_indent(ind,count,level,dirflag)
dirflag[level]=count-ind-1
result+=print_tree(fname,os.path.join(path,fname),new_indent,level+1,dirflag)
else:
new_indent = " "+get_indent(ind,count,level,dirflag)
result+=add_files(fname, new_indent)
return result
p=[]
for i in range(1000):
p.append(0)
tree=print_tree(tailing_dir(sys.argv[1]),sys.argv[1],"",0,p)
print(tree)