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

如何用Python从(str, int)列表生成带大小的层级文件结构?

从(str, int)元组列表生成可视化文件树

要解决这个问题,核心是先把路径字符串解析成层级结构,再递归遍历该结构生成带缩进和分支符号的可视化文本。以下是完整的实现代码:

def build_file_tree(path_size_list):
    # 构建嵌套字典表示的文件树结构
    tree = {}
    for path, size in path_size_list:
        parts = path.split('\\')
        current = tree
        for part in parts[:-1]:
            if part not in current:
                current[part] = {}
            current = current[part]
        # 叶子节点存储文件大小
        current[parts[-1]] = size
    
    # 递归生成可视化文本
    def generate_tree(node, prefix="", is_last=True):
        output = []
        items = list(node.items())
        for i, (name, value) in enumerate(items):
            is_last_item = (i == len(items) - 1)
            # 分支符号
            branch = "└──" if is_last_item else "├──"
            if isinstance(value, dict):
                # 处理目录
                output.append(f"{prefix}{branch}{name}")
                # 计算下一层的前缀
                new_prefix = prefix + ("    " if is_last_item else "│   ")
                output.extend(generate_tree(value, new_prefix, is_last_item))
            else:
                # 处理文件,带大小
                output.append(f"{prefix}{branch}{name} {value} Bytes")
        return output
    
    # 根节点处理(假设输入只有一个根目录,如示例中的dir1)
    root_name, root_content = next(iter(tree.items()))
    result = [root_name]
    result.extend(generate_tree(root_content, "", is_last=True))
    return '\n'.join(result)

# 测试示例输入
input_data = [
    ('dir1\\file.exe', 14680064),
    ('dir1\\file-1.bin', 4293569534),
    ('dir1\\file-2.bin', 4294967294),
    ('dir1\\file-3.bin', 4294967294),
    ('dir1\\archives\\archive1.zip', 5242880),
    ('dir1\\archives\\archive2.zip', 525788)
]

print(build_file_tree(input_data))

代码说明:

  • 构建层级字典:遍历每个路径,用split('\\')拆分路径片段,逐层构建嵌套字典——目录对应子字典,文件对应大小数值。
  • 递归生成可视化文本:遍历字典的每个节点,根据是否是当前层级的最后一个元素选择分支符号(└──或├──);目录会继续递归处理子节点,文件则直接输出名称和大小。
  • 前缀处理:通过前缀控制缩进,目录的子节点前缀会根据父节点是否是最后一个元素,选择添加空格或竖线,保证层级结构的视觉连贯性。

运行代码后,输出与期望完全一致:

dir1
├──file.exe 14680064 Bytes
├──file-1.bin 4293569534 Bytes
├──file-2.bin 4294967294 Bytes
├──file-3.bin 4294967294 Bytes
└──archives
    ├──archive1.zip 5242880 Bytes
    └──archive2.zip 525788 Bytes

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 06:10:27