我有一些看起来像YAML的数据,但不是。这是一个例子;
An instance of A
objectID=123
family=abc
An instance of A
objectID=234
family=bcd
List of 4 X elements:
An instance of X:
objectID=222
name=ccc
An instance of X:
objectID=333
等等......
我需要找到一种让它看起来更像这样的方法:
[
{'name': 'An instance of A',
'data': [
{'objectID': 123,
'family': 'abc'
}
]
},
...
我试图创建一些递归函数来解析它,但它最终变得一团糟。
我不是要求一个完整的工作示例,但在python中执行此操作的最佳方法是什么? 自我调用功能?使用另一个lib(我还没有找到)?使用另一种语言来帮助我并将整个内容嵌入到python中?
答案 0 :(得分:3)
使用堆栈,并在找到更多或更少级别的缩进时从中推送和弹出项目;堆栈上的每个级别都包含缩进深度和条目:
stack = [(0, {})] # indentation level, top-level entry
entry = stack[-1][1]
for line in input:
line = line.strip()
if not line: continue
indentation = len(input) - len(input.lstrip())
if indentation > stack[-1][0]: # indented further? New entry
entry = stack[-1][1]['data'] = {}
stack.append((indentation, entry)) # push
else:
while indentation < stack[-1][0]: # indentation dropped
del stack[-1] # pop
entry = stack[-1][1]
# process line and add to entry
result = stack[0][1]