首页 > 解决方案 > 使用python中的递归将YAML分层数据导出到CSV文件

问题描述

以下是我的 yaml 文件中的数据,列表和字典的组合。样本数据:

innings:
  - 1st innings:
      team: Kings XI Punjab
      deliveries:
        - 0.1:
            batsman: RS Bopara
            bowler: JA Morkel
            non_striker: IK Pathan
            runs:
              batsman: 1
              extras: 0
              total: 1
        - 0.2:
            batsman: IK Pathan
            bowler: JA Morkel
            non_striker: RS Bopara
            runs:
              batsman: 1
              extras: 0
              total: 1
  - 2nd innings:
      team: Chennai Super Kings
      deliveries:
        - 0.1:
            batsman: PA Patel
            bowler: IK Pathan
            extras:
              wides: 1
            non_striker: ML Hayden
            runs:
              batsman: 0
              extras: 1
              total: 1
        - 0.2:
            batsman: PA Patel
            bowler: IK Pathan
            non_striker: ML Hayden
            runs:
              batsman: 0
              extras: 0
              total: 0

我希望将数据放入如下数据框中。

Delivery, Batsman, Bowler, non_striker, runs_batsman, runs_extras, extras_type, Runs_total, player_out, mode_of_dismissal, fielders_involved
0.1,    RS Bopara,  JA Morkel,  IK Pathan, 1,   0,  NA(if extras are 0),    1,  NA, NA, NA

下面是我找到的用于展平数据的代码,但我无法根据需要进行修改,我需要使用递归本身来完成代码。(我已经想到使用循环,但这看起来并不高效)

def flatten(d,sep="_"):

    obj = collections.OrderedDict()

    def recurse(t,parent_key=""):

        if isinstance(t,list):
            for i in range(len(t)):
              recurse(t[i], parent_key + sep + str(i) if parent_key else str(i))
        elif isinstance(t,dict):
            for k,v in t.items():
              recurse(v, parent_key + sep + str(k) if parent_key else str(k))
        else:
            obj[parent_key] = t

    recurse(d)

    return obj

标签: pythondata-extractionpyyaml

解决方案


推荐阅读