python实现获取当前目录下的树形结构

news/2024/5/3 19:18:45/文章来源:https://blog.csdn.net/lihuanyu520/article/details/130031916

python实现获取当前目录下的树形结构

程序实现

在有些Linux上自带了tree命令来一树状结构显示一个目录,但是在有些linux上没有自带这个程序,所以这里用python写了一个小程序来实现这个功能,代码如下:

import osdef print_tree(folder_path, indent='', file_path=''):# 打印当前目录名称print(indent + os.path.basename(folder_path) + '/')# 写入文件with open(file_path, 'a') as f:f.write(indent + os.path.basename(folder_path) + '/' + '\n')# 获取子目录和文件列表subfolders = [f.path for f in os.scandir(folder_path) if f.is_dir()]files = [f.name for f in os.scandir(folder_path) if f.is_file()]# 递归打印子目录for i, subfolder in enumerate(sorted(subfolders)):# 判断是否为最后一个子目录if i == len(subfolders) - 1 and len(files) == 0:print_tree(subfolder, indent + '  ', file_path)else:print_tree(subfolder, indent + '│ ', file_path)# 打印文件for i, file in enumerate(sorted(files)):# 判断是否为最后一个文件if i == len(files) - 1:print(indent + '└── ' + file)with open(file_path, 'a') as f:f.write(indent + '└── ' + file + '\n')else:print(indent + '├── ' + file)with open(file_path, 'a') as f:f.write(indent + '├── ' + file + '\n')# 测试程序
folder_path = '/home/lihuanyu/code/03AdaBins'
tree_folder_path = folder_path + '/tree'
if not os.path.exists(tree_folder_path):os.mkdir(tree_folder_path)
file_path = tree_folder_path + '/tree.txt'
# 如果文件存在需要删除原有内容
if os.path.exists(file_path):os.remove(file_path)
with open(file_path, 'w') as f:print_tree(folder_path, file_path=file_path)

代码描述

  1. 首先导入 os 模块。

  2. 定义了一个名为 print_tree 的函数,接收三个参数:

  • folder_path:要打印树形结构的目录路径。
  • indent:缩进字符串,用于控制打印出来的树形结构缩进深度。
  • file_path:要将树形结构写入到的文件路径,如果该参数为空,则不会将树形结构写入到文件中。
  1. 打印当前目录名称。使用 os.path.basename 函数获取当前目录的名称,并使用 print 函数将其输出。

  2. 写入文件。使用 with open 将指定的文件以追加模式打开,并将当前目录的名称写入到文件中。

  3. 获取子目录和文件列表。使用 os.scandir 函数获取当前目录下所有子目录的路径和所有文件的名称,并分别保存到 subfoldersfiles 列表中。

  4. 递归打印子目录。遍历 subfolders 列表中的每个子目录,并使用递归调用 print_tree 函数来打印该子目录的树形结构,并根据子目录在列表中的位置以及是否有文件决定缩进字 符串。

  5. 打印文件。遍历 files 列表中的每个文件,并使用 print 函数打印该文件名,并根据文件在列表中的位置决定缩进字符串,并将文件名称写入到指定的文件中。

  6. 定义测试程序。首先指定要打印树形结构的目录路径 folder_path。然后创建一个用于保存树形结构的文件夹 tree_folder_path 和文件 file_path,并判断是否已存在该文件,如果存在则删除原有内容。最后使用 with open 打开文件并调用 print_tree 函数来输出并保存树形结构。

结果呈现

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_283593.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

共模电感(扼流圈) 差模电感(扼流圈)

共模电感 共模电感,也叫共模扼流圈。常用于电脑的开关电源,过滤共模的电磁干扰信号。 共模电感器由软磁铁芯(铁氧体磁芯)和两组同相绕制的线圈组成。对于共模信号,由于两组线圈产生的磁场不是抵消。而是相互叠加&…

存量市场之下,电商之战深入腹地且逻辑未变

纵然是在流量依然见顶的大背景下,电商行业的竞争并未结束。无论是以百亿补贴为代表的烧钱策略,还是以跨境出海为代表的规模策略,几乎都是这样一种现象的直接体现。种种迹象表明,未来的电商行业,依然会有新的战役发生。…

Hadoop集群环境搭建与应用回顾

文章目录一、 实训项目名称二、 学习情况小结三、 项目中用到的知识点四、 实训项目中负责功能板块五、 实训项目实现六、 实训项目过程中遇到的问题及解决方法七、实训体会与心得一、 实训项目名称 Hadoop集群环境搭建与应用 二、 学习情况小结 实操一部分: 通…

linux 服务器 docker 安装 nacos 2.0.3

docker 镜像 https://registry.hub.docker.com/r/nacos/nacos-server/tags 1.下载nacos镜像 这里下载的是2.0.3 docker pull nacos/nacos-server:2.0.32.查看镜像是否下载成功 如下图 docker images3.创建文件夹 注: 自定义创建,用于把docker内部的文件…

【基金学习】基金的相关计算题目

文章目录一、基金收益计算1. 累计收益/持有收益2. 年化收益/年化收益率3. 涨跌幅4. 分红二、风险计算1. 贝塔系数2. 波动率三、费用计算1. 托管费2. 管理费3. 销售服务费4. 申购/赎回费一、基金收益计算 1. 累计收益/持有收益 累计收益 持仓金额 - 本金 累计收益率 &#xf…

TCP 的 NACK 与 SACK

可靠传输,一旦丢包,必然 HoL blocking,NACK 和 SACK 必须二选一驱动重传: NACK:receiver 主动通告没有收到的报文,sender 收到后重传。 SACK:receiver 主动通告收到的报文,sender …

一文带你深入了解算法笔记中的前缀与差分(附源码)

📖作者介绍:22级树莓人(计算机专业),热爱编程<目前在c++阶段,因为最近参加新星计划算法赛道(白佬),所以加快了脚步,果然急迫感会增加动力>——…

笔记本上就能跑的 LLM 好使吗?GPT4ALL 体验

是骡子是马,牵出来遛遛正名看到这个标题,你可能会觉得是噱头。谁不知道 ChatGPT 模型有 1750 亿以上的参数,别说是在笔记本电脑上跑,就是使用高性能 GPU 的台式机,也无法带得动啊。老老实实调用 API 不好吗&#xff1f…

torchvision.transforms 常用方法解析(含图例代码以及参数解释)

本文代码和图片完全源于 官方文档: TRANSFORMING AND AUGMENTING IMAGES 中的 Illustration of transforms,参数介绍源自函数对应的官方文档。 代码中的变换仅仅使用了最简单的参数:pad,size 等,这里展现的只是简单的变换&#xf…

中间表示- 数据流分析

数据流分析往往与优化绑定在一起,如下图所示。 优化的一般模式 程序分析 (1)控制流分析、数据流分析、依赖分析等。 (2)得到被优化程序的静态保守信息,是对动态运行行为的近似。 程序重写 以上一步得到…

用于3D分子生成的等变扩散模型ICML2022

现代深度学习方法开始对分子科学产生重要影响。在Alphafold在蛋白质折叠预测方面取得成功的背后,越来越多的工作开发了深度学习模型来分析或合成分子。分子存在于物理3D空间中,因此受制于几何对称性,如平移、旋转。这些对称性被称为三维欧几里…

Compose(?/N) - 标准布局

组合函数不指定布局默认是Box堆叠。 一、纵向 Colum inline fun Column( modifier Modifier, verticalArrangement Arrangement.Top, //子元素纵向排列规则 horizontalAlignment Alignment.Start, //子元素横向排列规则 content: Composable ColumnScope.() -…

蓝桥杯基础12:BASIC-3试题 字母图形

资源限制 内存限制:256.0MB C/C时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s 问题描述 利用字母可以组成一些美丽的图形,下面给出了一个例子: ABCDEFG BABCDEF CBABCDE DCBABCD EDC…

【设计模式】设计模式概述以及UML图

设计模式概述以及UML图设计模式概述1. 设计模式的概念2. 学习设计模式的必要性3. 设计模式的分类UML图1. 什么是UML图2. 类图的概念和作用3. 类图的表示法4. 类与类之间的表示方式4.1 关联关系4.2 聚合关系4.3 组合关系4.4 依赖关系4.5 继承关系4.6 实现关系设计模式概述 1. 设…

工作面试老大难-MySQL中的锁类型

MySQL 是支持ACID特性的数据库。我们都知道”C”代表Consistent,当不同事务操作同一行记录时,为了保证一致性,需要对记录加锁。在MySQL 中,不同的引擎下的锁行为也会不同,本文将重点介绍 MySQL InnoDB引擎中常见的锁。…

卷,卷,卷,SAM发布不到24h | BAAI、浙大、北大联合推出SegGPT

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 昨天都被Meta的SAM模型刷屏了吧!但在其发布24h不到! 北京智源人工智能研究院联合浙大、北大发布SegGPT: Segmenting Everything In Context。让我们来一探究竟。 我们提出了SegGPT…

一文详解 unversioned files 怎么处理

通常unversioned files下面都是.idea文件,而.idea文件我们在做提交的时候基本上是不需要提交到gitee或github上的,所以我们可以把.idea文件忽略掉从而解决unversioned files里多余的文件,只专注于提交我们写的代码 找到.gitignore 打开后&a…

【Linux】一篇文章, 掌握Linux进程信号

文章目录进程信号介绍进程信号进程信号的处理signal() 捕捉信号用户层产生进程信号的方式键盘产生进程信号系统调用产生进程信号kill()raise()abort()软件条件产生进程信号硬件异常产生进程信号除0 和 越界访问、野指针 如何产生相应信号除0越界访问、野指针core dumpcore 文件…

Python3入门教程||Python3 正则表达式||Python3 CGI 编程

Python3 正则表达式 在 Python3 中正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。 Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。 re 模块使 Python 语言拥有全部的正则表达式功能。 c…

仿真创新大赛—国三省一 智能鱼缸(proteus)(stm32)

⏩ 大家好哇!我是小光,嵌入式爱好者,一个想要成为系统架构师的大三学生。 ⏩去年下半年参加了全国仿真创新大赛,也是取得了国赛三等奖,省赛一等奖的好成绩。 ⏩本篇文章对我们的参赛作品《智能鱼缸》做一个简介。 ⏩感…