You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中将目录树格式字符串转换为嵌套数据结构?

嘿,这个需求其实挺常见的——把扁平的路径列表转换成带层级依赖的树形结构,再输出成你要的格式对吧?我来给你拆解下思路和具体的Python实现方案:

核心思路

我们需要先把所有路径字符串转换成嵌套的树形数据结构(用字典就很直观,不需要自定义类),每个节点对应一个目录,节点的值存储它的子目录;等树构建完成后,再递归遍历这棵树,按照「父目录 -> 子目录1, 子目录2」的格式输出,或者转换成你需要的嵌套列表结构。

具体算法步骤
  • 第一步:初始化一个空字典作为树的根节点,用来存储最顶层的目录
  • 第二步:遍历每一条路径,用split('/')把路径拆分成一个个层级的目录名
  • 第三步:从根节点开始,逐个处理每个目录段:如果当前目录段不在当前节点的子节点里,就创建它;然后移动到这个子节点,继续处理下一段,直到路径的所有段都处理完
  • 第四步:树构建完成后,递归遍历树的每个节点,按照要求的格式输出,或者转换成嵌套列表结构
Python代码实现

1. 构建目录树 + 按要求格式输出

下面的代码会先把路径转换成树形字典,再递归打印出你要的层级关系:

def build_directory_tree(paths):
    # 用字典存储树形结构,键是目录名,值是子目录的字典
    root = {}
    for path in paths:
        # 拆分路径为目录段,同时去除可能的首尾空格
        parts = path.strip().split('/')
        current_node = root
        for dir_name in parts:
            # 如果当前目录不在子节点中,创建新的子节点
            if dir_name not in current_node:
                current_node[dir_name] = {}
            # 移动到子节点,继续处理下一个目录段
            current_node = current_node[dir_name]
    return root

def print_hierarchy(node, parent_name=""):
    # 获取当前节点的所有子目录
    children = list(node.keys())
    if not children:
        return
    
    # 拼接当前行的输出内容
    if parent_name:
        output_line = f"{parent_name} -> {', '.join(children)}"
    else:
        # 根节点的子目录直接输出
        output_line = ', '.join(children)
    print(output_line)
    
    # 递归处理每个子目录
    for child in children:
        new_parent = f"{parent_name} -> {child}" if parent_name else child
        print_hierarchy(node[child], new_parent)

# 测试用的输入列表
hierarchy_list = [
    "dir1",
    "dir1/dir1.1",
    "dir1/dir1.2",
    "dir1/dir1.3/dir1.3.1/dir1.3.1.1",
    "dir1/dir1.1/dir1.1.1",
    "dir1/dir1.1/dir1.1.2"
]

# 执行构建和输出
directory_tree = build_directory_tree(hierarchy_list)
print_hierarchy(directory_tree)

运行这段代码,你会得到和示例一致的输出:

dir1 -> dir1.1, dir1.2, dir1.3
dir1 -> dir1.1 -> dir1.1.1, dir1.1.2
dir1 -> dir1.3 -> dir1.3.1
dir1 -> dir1.3 -> dir1.3.1 -> dir1.3.1.1

2. 转换成嵌套列表结构

如果你需要的是嵌套列表(而非打印输出),可以用下面的函数把树形字典转换成嵌套列表/字典的混合结构:

def tree_to_nested_structure(node):
    nested = []
    for dir_name, children in node.items():
        child_structure = tree_to_nested_structure(children)
        if child_structure:
            # 如果有子目录,就用字典表示层级关系
            nested.append({dir_name: child_structure})
        else:
            # 没有子目录,直接存目录名
            nested.append(dir_name)
    return nested

# 调用示例
nested_result = tree_to_nested_structure(directory_tree)
print(nested_result)

输出结果会是这样的嵌套结构:

[
    {
        'dir1': [
            'dir1.2',
            {
                'dir1.1': ['dir1.1.1', 'dir1.1.2']
            },
            {
                'dir1.3': [
                    {
                        'dir1.3.1': ['dir1.3.1.1']
                    }
                ]
            }
        ]
    }
]

这个结构可以很方便地用于后续的层级遍历、数据处理等场景。

内容的提问来源于stack exchange,提问作者Manor Zvi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:27:50