import os  
import argparse  
  
  
def print_tree(directory, indent=0, is_last=False, print_all=False):  
    if not os.path.exists(directory):  
        return  
  
    if indent == 0:  
        print(directory)  
    else:  
        # 同一个目录的最后一个文件打印时,需要更改树枝符号  
        if is_last:  
            print("│   " * (indent - 1) + "└──", os.path.basename(directory))  
        else:  
            print("│   " * (indent - 1) + "├──", os.path.basename(directory))  
  
    if os.path.isdir(directory):  
        dir_list = os.listdir(directory)  
        # 为了打印美观,将一个文件移动到列表末尾  
        if not print_all:  
            dir_list = [i for i in dir_list if not i.startswith('.')]  
        for item in dir_list:  
            if os.path.isfile(item):  
                dir_list.remove(item)  
                dir_list.append(item)  
                break  
  
        for item in dir_list:  
            if not print_all:  
                if item.startswith('.'):  
                    continue  
            item_path = os.path.join(directory, item)  
            print_tree(item_path, indent + 1, is_last=(item == dir_list[-1]))  
  
  
if __name__ == "__main__":  
    parser = argparse.ArgumentParser(description='树形打印指定目录')  
  
    parser.add_argument('-d', '--directory', type=str, help='指定目录')  
    parser.add_argument('-a', '--all', action='store_true', help='打印隐藏文件')  
  
    args = parser.parse_args()  
  
    directory = args.directory if args.directory else '.'  
    print_all = args.all  
  
    print_tree(directory=directory, print_all=print_all)