用Python输出一个文件夹的所有文件结构

输出一个文件夹的所有目录和文件结构

新建一个Python文件,输入

这个文件表示查询一个文件夹所有的目录结构

import osdef print_directory_structure(root_dir):"""打印树状目录结构(优化版)"""if not os.path.exists(root_dir):print(f"错误:路径 {root_dir} 不存在")returnif not os.path.isdir(root_dir):print(f"错误:{root_dir} 不是一个目录")returnroot_name = os.path.basename(os.path.normpath(root_dir))print(f"{root_name}/")  # 根目录标题# 递归辅助函数(处理层级缩进和符号)def traverse_dir(current_dir, prefix, is_last):"""current_dir: 当前遍历的目录路径prefix: 层级前缀(用于绘制竖线/空格)is_last: 是否是父目录的最后一个子项"""# 获取当前目录下的子目录和文件(先目录后文件)entries = sorted(os.listdir(current_dir), key=lambda x: (not os.path.isdir(os.path.join(current_dir, x)), x))dirs = [e for e in entries if os.path.isdir(os.path.join(current_dir, e))]files = [e for e in entries if not os.path.isdir(os.path.join(current_dir, e))]all_entries = dirs + files  # 先目录后文件的顺序# 遍历所有子项for i, entry in enumerate(all_entries):is_last_entry = (i == len(all_entries) - 1)entry_path = os.path.join(current_dir, entry)# 连接符号:最后一个项用└──,其他用├──connector = '└── ' if is_last_entry else '├── '# 显示行(目录加/,文件不加)line = f"{connector}{entry}/" if os.path.isdir(entry_path) else f"{connector}{entry}"print(f"{prefix}{line}")# 下一层级的前缀:如果当前是最后一个项,用空格;否则用竖线if not is_last_entry:next_prefix = prefix + "│   "else:next_prefix = prefix + "    "# 递归处理子目录(仅目录需要继续遍历)if os.path.isdir(entry_path):traverse_dir(entry_path, next_prefix, is_last_entry)# 从根目录的子项开始递归(根目录本身已打印,前缀为空)traverse_dir(root_dir, "", is_last=True)if __name__ == "__main__":# 移除输入路径两端的单引号和双引号target_dir = input("请输入文件夹路径: ").strip().strip('"\'')print_directory_structure(target_dir)

运行文件

输入文件夹路径例如"C:\Users\86195\Desktop\java_demo\untitled1",输入的路径带不带双引号都行

带双引号

不带双引号

进阶操作

可以把一个文件夹a的目录结构信息存到txt文件中,然后根据txt文件在任意文件夹b生成文件夹a以及它的子文件

新建Python文件1.py

这个文件表示查询文件夹的所有目录结构,把目录结构信息输出到控制台和写入txt文件,如果txt文件有内容就覆盖

import osdef print_directory_structure(root_dir, output_file=None):"""打印树状目录结构(支持输出到文件)"""if not os.path.exists(root_dir):msg = f"错误:路径 {root_dir} 不存在"print(msg)if output_file: print(msg, file=output_file)returnif not os.path.isdir(root_dir):msg = f"错误:{root_dir} 不是一个目录"print(msg)if output_file: print(msg, file=output_file)returnroot_name = os.path.basename(os.path.normpath(root_dir))display_line = f"{root_name}/"print(display_line)if output_file: print(display_line, file=output_file)  # 输出到文件def traverse_dir(current_dir, prefix, is_last, output_file):entries = sorted(os.listdir(current_dir), key=lambda x: (not os.path.isdir(os.path.join(current_dir, x)), x))dirs = [e for e in entries if os.path.isdir(os.path.join(current_dir, e))]files = [e for e in entries if not os.path.isdir(os.path.join(current_dir, e))]all_entries = dirs + filesfor i, entry in enumerate(all_entries):is_last_entry = (i == len(all_entries) - 1)entry_path = os.path.join(current_dir, entry)connector = '└── ' if is_last_entry else '├── 'line = f"{connector}{entry}/" if os.path.isdir(entry_path) else f"{connector}{entry}"display_line = f"{prefix}{line}"print(display_line)  # 输出到控制台if output_file: print(display_line, file=output_file)  # 输出到文件next_prefix = prefix + ("│   " if not is_last_entry else "    ")if os.path.isdir(entry_path):traverse_dir(entry_path, next_prefix, is_last_entry, output_file)traverse_dir(root_dir, "", is_last=True, output_file=output_file)if __name__ == "__main__":target_dir = input("请输入文件夹路径(带不带双引号均可): ").strip().strip('"')txt_path = input("请输入txt文件保存路径(带不带双引号均可): ").strip().strip('"')# 打开文件并覆盖写入(若文件不存在则创建)with open(txt_path, 'w', encoding='utf-8') as f:print_directory_structure(target_dir, f)print(f"目录结构已成功保存到 {txt_path}(文件已覆盖)")

新建Python文件2.py

这个文件表示根据txt文件的信息在一个文件夹新建目录结构

import os
import redef rebuild_from_txt(txt_path, target_parent_dir):"""根据txt文件重建目录结构"""# 读取并清洗txt内容with open(txt_path, 'r', encoding='utf-8') as f:lines = [line.rstrip('\n') for line in f if line.strip()]  # 跳过空行if not lines:print("错误:txt文件内容为空")return# 解析根目录(第一行必须是"根目录名/")root_line = lines[0]if not root_line.endswith('/'):print(f"错误:txt文件格式错误,第一行应为根目录(以/结尾),当前第一行:{root_line}")returnroot_dir_name = root_line[:-1]  # 去除末尾的/target_root_dir = os.path.join(target_parent_dir, root_dir_name)# 创建根目录(若已存在则跳过)try:os.makedirs(target_root_dir, exist_ok=True)print(f"创建根目录:{target_root_dir}")except Exception as e:print(f"根目录创建失败:{e}")return# 维护当前层级的目录栈(保存各层目录名)dir_stack = [root_dir_name]  # 初始为根目录名# 正则匹配行结构(处理缩进和符号)line_pattern = re.compile(r'^(\s*)(├── |└── )(.*?)(/?)$')for line in lines[1:]:  # 第一行已处理,从第二行开始match = line_pattern.match(line)if not match:print(f"警告:无法解析行(格式错误):{line},跳过")continueprefix_space, _, name, is_dir_flag = match.groups()is_dir = is_dir_flag == '/'  # 目录以/结尾# 计算当前层级(每个层级占4个字符:如"│   "或"    ")current_depth = len(prefix_space) // 4 + 1  # 根目录是层级0,子目录层级从1开始# 调整目录栈长度(确保栈长度等于当前层级)while len(dir_stack) > current_depth:dir_stack.pop()  # 层级变浅,弹出深层目录if len(dir_stack) < current_depth:print(f"警告:行结构不完整(层级跳跃):{line},跳过")continue# 拼接当前路径current_parent = os.path.join(target_parent_dir, *dir_stack)current_path = os.path.join(current_parent, name)# 创建目录或文件try:if is_dir:os.makedirs(current_path, exist_ok=True)dir_stack.append(name)  # 目录入栈,用于下一层级print(f"创建目录:{current_path}")else:# 创建空文件(确保父目录存在)os.makedirs(current_parent, exist_ok=True)with open(current_path, 'w', encoding='utf-8'):pass  # 空文件print(f"创建文件:{current_path}")except Exception as e:print(f"创建失败:{current_path},错误:{e}")if __name__ == "__main__":txt_path = input("请输入txt文件路径(带不带双引号均可): ").strip().strip('"')target_parent = input("请输入目标父文件夹路径(带不带双引号均可): ").strip().strip('"')rebuild_from_txt(txt_path, target_parent)print("目录结构重建完成!")

新建txt文件

运行1.py文件

文件夹路径例如我输入

C:\Users\86195\Desktop\1新建文件夹\1

表示把文件夹1的目录信息在控制台输出并且在txt文件中写入,目录信息包括文件夹1

所有输入的文件路径带不带双引号都可以

运行2.py文件

例如目标父文件夹路径我输入

C:\Users\86195\Desktop\java_demo

会根据txt中的文件信息在java_demo文件夹下新建一个文件夹1和它的所有子文件

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

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

相关文章

R语言的专业网站top5推荐

李升伟 以下是学习R语言的五个顶级专业网站推荐&#xff0c;涵盖教程、社区、资源库和最新动态&#xff1a; 1.R项目官网 (r-project.org) R语言的官方网站&#xff0c;提供软件下载、文档、手册和常见问题解答。特别适合初学者和高级用户&#xff0c;是获取R语言核心资源的…

IntelliJ IDEA给Controller、Service、Mapper不同文件设置不同的文件头注释模板、Velocity模板引擎

通过在 IntelliJ IDEA 中的 “Includes” 部分添加多个文件头模板&#xff0c;并在 “Files” 模板中利用这些包含来实现不同类型文件的注释。以下是为 Controller、Service、Mapper 文件设置不同文件头的完整示例&#xff1a; 1. 设置 Includes 文件头模板 File > Settin…

LabVIEW双音信号互调失真测量

该VI构建实现了一套完整的双音信号互调失真&#xff08;IMD&#xff09;测量系统。该系统通过精确控制信号生成、采集与分析流程&#xff0c;实现对被测设备&#xff08;DUT&#xff09;非线性特性的量化评估&#xff0c;可广泛应用于通信设备、音频系统、射频器件等领域的研发…

56.合并区间(java)

题目描述&#xff1a; 1.先判断给定intervals是否为空或者大小是否为1&#xff0c;是则直接返回intervals。 2.对intervals进行排序 数组形式则使用&#xff1a;Arrays.sort(intevals,(a,b)->Integer.compare(a[0],b[0])); ArrayList形式&#xff1a;intervals.sort((a,b)-…

Redis设计与实现——Redis命令参考与高级特性

Redis命令参考 数据类型相关命令 SET&#xff1a;设置键值&#xff0c;支持过期时间、不存在/存在条件。GET&#xff1a;获取键值&#xff0c;若键不存在返回 nil。INCR/DECR&#xff1a;将键的整数值增1/减1&#xff0c;键不存在时初始化为0。MSET/MGET&#xff1a;批量设置…

基于 STM32 的全自动洗车监控系统设计与实现

摘要 本文提出一种基于 STM32F103RCT6 芯片的全自动洗车监控系统方案,通过多传感器融合与智能控制算法,实现车辆检测、洗车流程自动化及状态远程监控。系统集成硬件选型、电路设计、软件流程及通信功能,可广泛应用于智能洗车场景。 一、硬件系统设计 1. 核心芯片选型 主控…

掌握Multi-Agent实践(七):基于AgentScope分布式模式实现多智能体高效协作[并行加速大模型辅助搜索、分布式多用户协同辩论赛]

之前的案例都是运行在单台机器上以单进程形式运行,受限于 Python 的全局解释器锁,实际只能有效利用一个 CPU 的计算资源,并且无法支持多个用户从自己的电脑上接入同一个 Multi-Agent 应用进行交互。为了提高运行效率并支持多用户接入同一个应用中,AgentScope 提供了分布式…

docker-compose部署项目(springboot服务)以及基础环境(mysql、redis等)ruoyi-ry

上传jar 配置文件等 到目录&#xff1a;/home/ruoyi/docker 设置权限 chmod x *.sh 开通端口&#xff08;我已经开通了&#xff09; sh ./deploy.sh port 开始构建 docker-compose build 构建成功 可以先拉取镜像 docker pull nacos/nacos-server docker pull nginx docker …

Axure疑难杂症:统计分析页面引入Echarts示例动态效果

亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢! Axure产品经理精品视频课已登录CSDN可点击学习https://edu.csdn.net/course/detail/40420 课程主题:统计分析页面引入Echarts示例动态效果 主要内容:echart示例引入、大小调整、数据导入 应用场景:统计分析页面…

如何使用WordPress创建美食博客

不管你是否意识到&#xff0c;食物是我们生活的核心。有些人将其用作燃料&#xff0c;而另一些人则将食谱作为一种艺术形式呈现。如果您属于后者&#xff0c;并且想创建一个美食博客来分享您的热情&#xff0c;那么WordPress是一个顶级平台。 几乎每个话题都有一个博客利基&am…

【MySQL】库与表的操作

一、库的操作 1. 查看数据库 语法&#xff1a;show databases;这里的database是要加s的 查看当前自己所处的数据库&#xff1a;select database(); 例如下图&#xff0c;我当前所处的数据库就是在class1数据库 2. 创建数据库 语法&#xff1a;create database [if not e…

Unity3D开发AI桌面精灵/宠物系列 【六】 人物模型 语音口型同步 LipSync 、梅尔频谱MFCC技术、支持中英文自定义编辑- 基于 C# 语言开发

Unity3D开发AI桌面精灵/宠物系列 【六】 人物模型 语音口型同步 LipSync 、梅尔频谱MFCC技术 C# 语言开发 该系列主要介绍怎么制作AI桌面宠物的流程&#xff0c;我会从项目开始创建初期到最终可以和AI宠物进行交互为止&#xff0c;项目已经开发完成&#xff0c;我会仔细梳理一下…

MoonBit正式入驻GitCode!AI时代的编程语言新星,开启高性能开发新纪元

在AI与编程语言深度交融的今天&#xff0c;开发者们正见证一场技术生产力的革命。由IDEA研究院基础软件中心倾力打造的MoonBit&#xff08;月兔&#xff09;编程语言&#xff0c;自2023年横空出世以来&#xff0c;凭借高性能、低延迟、轻量化的特性&#xff0c;迅速成为全球开发…

LLMs:《POE报告:2025年春季人工智能模型使用趋势》解读

LLMs&#xff1a;《POE报告&#xff1a;2025年春季人工智能模型使用趋势》解读 导读&#xff1a;2025年5月13日&#xff0c;该报告基于 Poe 平台的用户数据&#xff0c;分析了 2025 年春季人工智能模型的使用趋势。报告指出&#xff0c;人工智能格局快速演变&#xff0c;通用文…

STM32 之网口资源

1 网口资源介绍 STM32F407 是 STMicroelectronics 推出的高性能 ARM Cortex-M4 微控制器&#xff0c;具备多种外设接口&#xff0c;其中包括一个 Ethernet MAC 控制器&#xff08;带 IEEE 1588 支持&#xff09;。这意味着你可以使用 STM32F407 实现网络通信功能&#xff08;通…

Almalinux中出现ens33 ethernet 未托管 -- lo loopback 未托管 --如何处理:

解决 AlmaLinux 中网络接口 ens33 和 lo 显示为“未托管”的问题 当 AlmaLinux 系统中的网络接口&#xff08;如 ens33 和 lo&#xff09;显示为“未托管”时&#xff0c;这意味着这些接口没有被 NetworkManager 正常管理。以下是详细的分析和解决方案&#xff1a; 1. 检查 N…

数据库中关于查询选课问题的解法

前言 今天上午起来复习了老师上课讲的选课问题。我总结了三个解法以及一点注意事项。 选课问题介绍 简单来说就是查询某某同学没有选或者选了什么课。然后查询出该同学的姓名&#xff0c;学号&#xff0c;课程号&#xff0c;课程名之类的。 sql文件我上传了。大家可以尝试练…

Qt图表库推荐指南与分析

目录 一、核心图表库横向对比1. Qt Charts2. QCustomPlot3. QWT (Qt Widgets for Technical Applications)4. KD Chart 二、性能与功能对比矩阵三、选型策略与组合方案1. 通用型需求&#xff1a;2. 技术型场景&#xff1a;3. 企业级开发&#xff1a; 四、未来趋势与避坑指南1. …

LangGraph 2 - 智能体开发、流式传输、模型调用、工具、MCP、上下文、内存、人机协同、部署、UI

文章目录 使用LangGraph进行智能体开发什么是智能体&#xff1f;核心特性高层构建模块包生态系统 运行代理基础用法输入与输出输入格式使用自定义 Agent 状态 输出格式流式输出最大迭代次数其他资源 流式传输代理进度监控LLM 令牌工具更新流式多模态传输禁用流式传输其他资源 L…

Android同屏采集并推送RTMP和启动轻量级RTSP服务技术实践

随着视频直播需求的不断提升&#xff0c;如何实现高效的实时视频采集和推流&#xff0c;成为了开发者们关注的重点。本文将结合大牛直播SDK&#xff0c;介绍如何在 Android 平台实现 同屏采集、推送 RTMP 流&#xff0c;以及如何启动轻量级 RTSP 服务&#xff0c;让开发者快速搭…