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)