如何用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
相关产品推荐
相关产品推荐

