Экспорт иерархических данных YAML в файл CSV с использованием рекурсии в python - PullRequest
1 голос
/ 30 апреля 2020

Ниже приведены данные в моем файле 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
...