Python根据文件路径列表生成带分支可视化目录树的方法
基于文件路径列表生成带分支符号的目录树
本场景为实体目录扫描打印树结构的扩展,核心要求为输入文件路径列表,递归生成带标准分支符号、层级清晰的目录树字符串,支持任意深度的目录结构,无需读取本地实体目录。
效果参考
输入
[ 'main_folder\\file01.txt', 'main_folder\\file02.txt', 'main_folder\\folder_sub1\\file03.txt', 'main_folder\\folder_sub1\\file04.txt', 'main_folder\\folder_sub1\\file05.txt', 'main_folder\\folder_sub1\\folder_sub1-1\\file06.txt', 'main_folder\\folder_sub1\\folder_sub1-1\\file07.txt', 'main_folder\\folder_sub1\\folder_sub1-1\\file08.txt', 'main_folder\\folder_sub2\\file09.txt', 'main_folder\\folder_sub2\\file10.txt', 'main_folder\\folder_sub2\\file11.txt' ]
输出
main_folder ├── file01.txt ├── file02.txt ├── folder_sub1 │ ├── file03.txt │ ├── file04.txt │ ├── file05.txt │ └── folder_sub1-1 │ ├── file06.txt │ ├── file07.txt │ └── file08.txt └── folder_sub2 ├── file09.txt ├── file10.txt └── file11.txt
如果需要省略最外层根目录,直接渲染根节点下的子内容即可,输出和需求示例完全匹配。
实现方案
实现分为两个核心步骤:
- 路径转嵌套字典:遍历所有输入路径,按路径分段逐层构建嵌套字典,自动适配Windows、Unix系统的路径分隔符
- 递归渲染树结构:遍历嵌套字典,根据节点是否为当前层级最后一项,动态选择分支连接符、拼接子层级前缀,最终生成对齐无错位的树状字符串
完整代码
from pathlib import PurePosixPath, PureWindowsPath import os def paths_to_nested_dict(paths: list[str]) -> dict: """将文件路径列表转换为代表目录结构的嵌套字典""" tree = {} for path in paths: # 自动适配不同系统的路径分隔符 if os.sep == "\\": path_parts = PureWindowsPath(path).parts else: path_parts = PurePosixPath(path).parts current_node = tree for part in path_parts: current_node = current_node.setdefault(part, {}) return tree def render_directory_tree(tree: dict, prefix: str = "") -> list[str]: """递归渲染嵌套目录字典为带分支符号的行列表""" lines = [] items = list(tree.items()) for index, (node_name, child_nodes) in enumerate(items): is_last_node = index == len(items) - 1 # 选择当前节点的连接符 connector = "└── " if is_last_node else "├── " lines.append(f"{prefix}{connector}{node_name}") # 存在子目录则递归渲染,更新子层级前缀 if child_nodes: child_prefix = " " if is_last_node else "│ " lines.extend(render_directory_tree(child_nodes, prefix + child_prefix)) return lines # 调用示例 if __name__ == "__main__": input_path_list = [ 'main_folder\\file01.txt', 'main_folder\\file02.txt', 'main_folder\\folder_sub1\\file03.txt', 'main_folder\\folder_sub1\\file04.txt', 'main_folder\\folder_sub1\\file05.txt', 'main_folder\\folder_sub1\\folder_sub1-1\\file06.txt', 'main_folder\\folder_sub1\\folder_sub1-1\\file07.txt', 'main_folder\\folder_sub1\\folder_sub1-1\\file08.txt', 'main_folder\\folder_sub2\\file09.txt', 'main_folder\\folder_sub2\\file10.txt', 'main_folder\\folder_sub2\\file11.txt' ] # 转换为嵌套字典 dir_tree = paths_to_nested_dict(input_path_list) # 提取根节点 root_name, root_content = next(iter(dir_tree.items())) # 带根节点输出 output_lines = [root_name] + render_directory_tree(root_content) print("\n".join(output_lines)) # 不带根节点(匹配需求示例输出) # output_lines = render_directory_tree(root_content) # print("\n".join(output_lines))
特性说明
- 无第三方依赖,仅使用Python标准库
- 递归逻辑无深度限制,支持任意层级的目录结构
- 分支对齐逻辑和系统原生
tree命令输出完全一致,无错位问题 - 自动适配不同操作系统的路径格式,Windows反斜杠、Linux/macOS正斜杠路径均可正常解析
内容的提问来源于stack exchange,提问作者the_RR
相关产品推荐
相关产品推荐

