# coding=utf-8import os.pathimport sysimport timelink1 = "─┬─"link2 = "├──"link3 = "───"link4 = "└──"link5 = " │ "link6 = " "link7 = "│ "class File(object): def __init__(self, abs_path, name, children=[]): self.abs_path = abs_path self.name = name self.children = children self.next = None def __repr__(self) -> str: return str({'name': self.name, 'children': self.children })def create_path(parent, file): return parent + os.sep + filedef sub_dirs(path): return [x for x in os.listdir(path) if os.path.isdir(create_path(path, x))]def sub_dirs_abs(path): return [create_path(path, x) for x in os.listdir(path) if os.path.isdir(create_path(path, x))]def dir_tree(path): parent = File(path, os.path.basename(path), []) dirs = sub_dirs_abs(path) for dir in dirs: kid = dir_tree(dir) parent.children.append(kid) for i in range(len(parent.children) - 1): parent.children[i].next = parent.children[i + 1] return parentdef space(num=0): return " " * numdef print_prefix(): passdef print_dir_tree(dir, link='', deep=0, prefix_print=''): print(prefix_print, end="") print(link, end="") print(dir.name) if dir.next: prefix_print += link7 else: prefix_print += link6 for i in range(len(dir.children) - 1): print_dir_tree(dir.children[i], link2, deep + 1, prefix_print) if len(dir.children) >= 1: print_dir_tree(dir.children[-1], link4, deep + 1, prefix_print)def main(argv): base_path = argv[1] if len(argv) >= 2 else os.path.abspath('.') root = dir_tree(base_path) print_dir_tree(root)if __name__ == '__main__': start = time.time() main(sys.argv) end = time.time() print("print dir tree cost {:.2f}s".format(end - start))