首页 > 其他分享 >打印目录树

打印目录树

时间:2024-04-02 12:59:13浏览次数:20  
标签:self 打印 dirpath dirmap dirchain 目录 def

       有的时候,需要了解一个目录及其子目录的层次结构,比方说在找东西的时候,不记得东西放在什么目录下了,或者忘了当初在什么位置创建了一个目录,再比方说看代码的时候,想要了解整个project的代码是怎么进行目录划分的,系统里有查看进程树的命令,但是没有查看目录树的命令,ls命令没有这个功能,于是作者便写了个小程序来完成这个工作。小程序只适用于linux平台,windows平台的版本有心的朋友可以自行修改一下实现。

       下面这张图便是作者用小程序打印出来的系统里的一个目录树:

       作者是参考进程树的输出样式来设计的目录树的输出样式。在这张图里,--和|-用来表示树的分支,树的结点的各个子结点各在一行并且水平位置一致。

       来说一下这个程序的设计思路,要打印目录树,必然离不了对目录树的遍历操作,这里采用后根遍历来访问目录树,一边访问各级目录,一边进行目录树的绘制,绘制图形的时候按行进行绘制。程序的难点在于按行进行绘制,如上图所见,图的一行里除了有目录名称和表示树的分支的--和|-之外,还有大量的空白和单一的|以及换行,为了完成工作,我们需要记住由根目录(树的根结点)到当前访问到的目录(树的结点)的路径,依次访问路径上的结点,进行图的行的绘制。代码见下方。

import os, sys

class dirattrs:
    firstchld = False
    lastchld = False
    allchlddrawed = False
    def __init__(self, dirpath):
        self.path = dirpath
        self.name = os.path.basename(dirpath)
    def setfirstchld(self):
        self.firstchld = True
    def setlastchld(self):
        self.lastchld = True
    def setallchlddrawed(self):
        self.allchlddrawed = True

def dirtraverse(dirpath):
    dirchain = []
    dirmap = "";
    def blanks(n):
        return "".join([" " for i in range(n)])
    def draw():
        nonlocal dirmap
        for i, d in enumerate(dirchain):
            if d is dirchain[-1]:
                dirmap += d.name
                if d.lastchld is True:
                    dirchain[i - 1].setallchlddrawed()
            else:
                if dirchain[-1].firstchld is not True:
                    if not d.allchlddrawed:
                        if dirchain[i + 1] is dirchain[-1]:
                            dirmap += blanks(len(d.name)) + "|-"
                        else:
                            dirmap += blanks(len(d.name)) + "| "
                    else:
                        dirmap += blanks(len(d.name) + 2)
                else:
                    if d is dirchain[-2]:
                        dirmap += "--"

    def traverse(dirobj):
        nonlocal dirmap
        dirchain.append(dirobj)
        draw()
        subdirs = []
        for chldfile in os.listdir(dirobj.path):
            chldfilepath = dirobj.path + "/" + chldfile
            if os.path.isdir(chldfilepath):
                subdirs.append(dirattrs(chldfilepath))
        if not subdirs:
            dirmap += "\n"
            dirchain.pop()
            return
        subdirs[0].setfirstchld()
        subdirs[-1].setlastchld()
        for d in subdirs:
            traverse(d)
        dirchain.pop()

    dirpath = os.path.abspath(dirpath)
    traverse(dirattrs(dirpath))
    return dirmap

if __name__ == "__main__":
    print(dirtraverse(sys.argv[1]))

标签:self,打印,dirpath,dirmap,dirchain,目录,def
From: https://blog.csdn.net/weixin_40756114/article/details/137264301

相关文章

  • 使用Sparse Checkout 排除跟踪Git仓库中指定的目录或文件
    应用场景在一个大工程里包含由不同部门开发的模块时,项目的Git仓库肯定很大,造成每次Git操作相对比较耗时。因为开发人员一般只关心他们部门的模块的代码,所以完全可以排除一些他完全不需要用到的目录。这时候就可以使用Git的SparseCheckout。操作步骤1、若未拉取仓库代码时mk......
  • Camstar半导体打印服务安装配置
    安装包配置如下: 保存后,启动服务。  ......
  • ET8开源游戏:英雄传说(零)简介与总目录篇
    《英雄传说》是一个基于ET8.1的双端C#(Client-Unity3D,Server:.Net8)开发的在线联网多人竞技游戏。当前文章主要做此Demo的技术分解,主要是战斗系统跟状态同步的技术分享,大伙有想法的欢迎评论区讨论,后续会逐步迭代分享写完:(一)鲁班配置表方案集成与使用(二)YooAsset介绍与使用,加密(......
  • windows版本docker修改存储目录
    dockerdesktop里面,settings=>resource=>advance 或者手动操作1使用wsl--list-v在cmd终端,查看桌面是否关闭,如果没有关闭,使用wsl--shutdown立即终止所有正在运行的发行版和WSL2轻量级实用程序虚拟机2.查看存储地址默认情况下,DockerDesktopforWindow会创建如下......
  • 深入解析:Linux目录结构及其功能详解
    Linux目录结构是Linux操作系统中的核心组成部分,它承载着整个系统的文件和资源。本文将带领读者深入解析Linux的目录结构,详细介绍各个目录的功能与用途,帮助读者更好地理解和使用Linux系统。从根目录“/”开始,我们将逐一探讨各个子目录,如“/bin”、“/etc”、“/home”等,揭示......
  • .NetCore 目录浏览 和 静态文件
    1. 静态文件 包:microsoft.aspdotnet.staticfilesapp.UseStaticFiles() 会默认找到wwwroot文件夹//匹配到指定条件然后执行中间件//使用中间件//静态文件//UseStaticFiles中间件app.UseStaticFiles();//使用默认文件去找到wwwroot文件夹//......
  • proc_create_data函数创建/proc/目录下的文件
    proc_create_data是Linux内核中用于创建/proc虚拟文件系统中的一个文件接口函数。这个函数允许内核模块或驱动程序在/proc目录下创建一个文件节点,用户空间的程序可以通过读写这个文件来与内核模块进行交互,获取或设置相关信息。函数原型通常如下所示:structproc_dir_entry*......
  • 【PCB专题】案例:Allegro怎么1:1在纸上打印出PCB板
        首先我们要知道为什么我们需要1:1打印出PCB板?为什么需要1:1打印    一般我们要1:1打印出来这个功能是在新画的器件封装验证、首板结构配合检查、多个板卡互连验证等情况下使用:    在新画了一个器件封装时,如果我们手上有实物,那么通过1:1打印出来后可......
  • 数据资产目录建设指南
    一、数据资产目录的构成作为数字化时代的关键基础设施,数据资产目录的构成需要全面地体现企业数据资产的内涵和外延。一个高质量的数据资产目录应当包含以下几个核心组成部分:1.1数据资产清单数据资产清单是数据资产目录的基石,全面准确地列出了组织内的所有数据资产。......
  • 打印指定路径下所有文件的具体路径
    打印指定路径下所有文件的具体路径importosinput_path='./'path_file=open('path_file','w')forroot,dirs,filesinos.walk(input_path):forfileinfiles:path_file.write(os.path.join(root,file)+'\n')path_f......