Разобрать файл и создать структуру данных

Мы хотим проанализировать файл и создать какую-то структуру данных, которая будет использоваться позже (в Python). Содержимое файла выглядит следующим образом:

      plan HELLO
   feature A 
       measure X :
          src = "Type ,Name"
       endmeasure //X

       measure Y :
        src = "Type ,Name"
       endmeasure //Y

       feature Aa
           measure AaX :
              src = "Type ,Name"
                    "Type ,Name2"
                    "Type ,Name3"
           endmeasure //AaX

           measure AaY :
              src = "Type ,Name"
           endmeasure //AaY
           
           feature Aab
              .....
           endfeature // Aab
         
       endfeature //Aa
 
   endfeature // A
   
   feature B
     ......
   endfeature //B
endplan

plan HOLA
endplan //HOLA

Итак, есть файл, который содержит один или несколько планов, а затем каждый план содержит одну или несколько функций, кроме того, каждая функция содержит меру, содержащую информацию (источник, тип, имя), а функция может дополнительно содержать больше функций.

Нам нужно проанализировать файл и создать структуру данных, которая бы имела

                           plan (HELLO) 
            ------------------------------
             ↓                          ↓ 
          Feature A                  Feature B
  ----------------------------          ↓
   ↓           ↓             ↓           ........
Measure X    Measure Y    Feature Aa
                         ------------------------------
                            ↓           ↓             ↓ 
                       Measure AaX   Measure AaY   Feature Aab
                                                        ↓
                                                        .......

Я пытаюсь проанализировать файл построчно и создать список списков, которые будут содержать план → функция → мера, функция

      def getplans(s):
    stack = [{}]
    stack_list = []
    
    for line in s.splitlines():
        if ": " in line:  # leaf
            temp_stack = {}
            key, value = line.split(": ", 1)
            key = key.replace("source","").replace("=","").replace("\"","").replace(";","")
            value = value.replace("\"","").replace(",","").replace(";","")
            temp_stack[key.strip()] = value.strip()
            stack_list.append(temp_stack)
            stack[-1]["MEASURED_VAL"] = stack_list
        elif line.strip()[:3] == "end":
            stack.pop()
            stack_list = []
        elif line.strip():
            collection, name, *_ = line.split()
            stack.append({})
            stack[-2].setdefault(collection, {})[name] = stack[-1] 
    return stack[0]

0 ответов

Другие вопросы по тегам