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

如何使用Python解析树结构CSV文件生成父子关系对应表

带层级前导逗号的CSV父子关系解析方案

待处理CSV共3000行,节点层级由行首逗号数量决定,内容示例如下:

A,
,B
,,B1
,,B2
,,,,,B2a
,C
,,C1
,,,C1a
,,C2
,,,,,C2a1a

需输出包含Parent、Child两列的父子对应表,叶子节点需关联到最近的上层父节点,预期输出示例:

Parent Child
A B
B B1
B B2
B2 B2a
A C
C C1
C1 C1a
C C2
C2 C2a1a

实现思路

  • 逐行读取文件,去除行尾空白、末尾多余逗号,过滤空行
  • 计算每行开头的连续逗号数量作为当前节点的层级
  • 维护一个层级映射表,存储每个层级对应的最新节点名称
  • 层级为0的根节点无父节点,仅存入层级映射表
  • 其余层级节点的父节点为层级映射表中「当前层级-1」对应的节点值
  • 每处理完成一个节点,更新层级映射表中当前层级的节点值,确保后续更深层级节点能匹配到最近父节点

Python实现代码

import csv

# 存储各层级对应的最新节点,key为层级数,value为节点名称
level_map = {}
result = [["Parent", "Child"]]

# 替换为你的CSV文件路径
with open("tree_data.csv", "r", encoding="utf-8") as f:
    for line in f:
        # 去除首尾空白和行尾多余逗号
        processed_line = line.strip().rstrip(",")
        if not processed_line:
            continue
        # 计算前导逗号数量即层级
        leading_comma_count = len(processed_line) - len(processed_line.lstrip(","))
        current_node = processed_line.lstrip(",")
        # 根节点无需处理父级关系
        if leading_comma_count == 0:
            level_map[leading_comma_count] = current_node
            continue
        # 取上一级的最新节点作为父节点
        parent_node = level_map[leading_comma_count - 1]
        result.append([parent_node, current_node])
        # 更新当前层级的最新节点
        level_map[leading_comma_count] = current_node

# 输出结果到新文件
with open("parent_child_result.csv", "w", encoding="utf-8", newline="") as f:
    writer = csv.writer(f, delimiter=" ")
    writer.writerows(result)

上述代码可直接处理3000行规模的CSV无性能压力,输出结果完全匹配预期要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 00:45:04