python生成树状图结构文件

#!python3
# -*- coding: utf-8 -*-
import os
import sys
from typing import Tuple
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))  # not required after 'pip install uiautomation'
import uiautomation as auto


def listDir(path: Tuple[str, bool]):
    if path[1]:
        files = []
        files2 = []
        for it in os.listdir(path[0]):
            absPath = os.path.join(path[0], it)
            if os.path.isdir(absPath):
                files.append((absPath, True))
            else:
                files2.append((absPath, False))
        files.extend(files2)
        return files


def main(directory: str, maxDepth: int = 0xFFFFFFFF):
    remain = {}
    texts = []
    absdir = os.path.abspath(directory)
    for (it, isDir), depth, remainCount in auto.WalkTree((absdir, True), getChildren=listDir, includeTop=True, maxDepth=maxDepth):
        remain[depth] = remainCount
        prefix = ''.join('┃   ' if remain[i] else '    ' for i in range(1, depth))
        if depth > 0:
            if remain[depth] > 0:
                prefix += '┣━> ' if isDir else '┣━━ '
            else:
                prefix += '┗━> ' if isDir else '┗━━ '
        file = os.path.basename(it)
        texts.append(prefix)
        texts.append(file)
        texts.append('\n')
        auto.Logger.Write(prefix, writeToFile=False)
        auto.Logger.WriteLine(file, auto.ConsoleColor.Cyan if isDir else auto.ConsoleColor.Default, writeToFile=False)
    allText = ''.join(texts)
    auto.Logger.WriteLine(allText, printToStdout=False)
    ret = input('\npress Y to save dir tree to clipboard, press other keys to exit\n')
    if ret.lower() == 'y':
        auto.SetClipboardText(allText)


if __name__ == '__main__':
    if len(sys.argv) == 1:
        dir_ = input('input a dir: ')
        main(dir_)
    elif len(sys.argv) == 2:
        main(sys.argv[1])
    else:
        main(sys.argv[1], int(sys.argv[2]))

 效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值