如何在python中解析这个特殊的配置文件?

2024-09-26 22:49:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些配置文件,数据格式无法更改。在

其中一个看起来像这样:

root {
  configuration {
    field_a: "aaaa"
    field_b: "bbbb"
  }
  child {
    configuration {
        field_a: "aaa1"
        field_b: "bbb1"
    }
  }
  child {
    configuration {
        field_a: "aaa2"
        field_b: "bbb2"
    }
  }
}

我需要解析文件并将其保存为JSON对象:

^{pr2}$

有什么办法使它成为可能吗?在


Tags: 文件对象jsonchildfield配置文件rootconfiguration
2条回答

您的数据格式是非官方的javascript数组。对于优秀的python来说,很容易用4行代码将它们解析为python dict。然后使用simplejson解析为您喜欢的任何json格式。在

s = '''                                                                                                          
root {                                                                                                           
  configuration {                                                                                                
    field_a: "aaaa"                                                                                              
    field_b: "bbbb"                                                                                              
  }                                                                                                              
  child {                                                                                                        
    configuration {                                                                                              
        field_a: "aaa"                                                                                           
        field_b: "bbb"                                                                                           
    }                                                                                                            
  }                                                                                                              
}                                                                                                                
'''                                                                                                              

s = s.replace("{", ":{").replace("}", "},")                                                                      
s = "{%s}"%s                                                                                                     

import re                                                                                                        
s = re.sub(r'(\w+)"', r'\1",', s)                                                                                
s = re.sub(r"(\w+)\s*\:", r'"\1":', s)                                                                           
print "string:", s                                                                                               

d = eval(s)                                                                                                      
print "python dict:", d                                                                                          

import simplejson as json                                                                                        
print "json:", json.dumps(d) 

一个快速的想法:

如果配置是很好的缩进和线条,例如:

将“{”和“}”替换为这样:

root:
  configuration:
    field_a: "aaaa"
    field_b: "bbbb"
  child:
    configuration:
        field_a: "aaa"
        field_b: "bbb"

现在它是一个yaml格式的文件! 只要把yaml转换成json就行了!在

^{pr2}$

更新

由于child是一个列表,而且两个“root”、“configuration”和“child”似乎都是关键字,请稍作修改,然后采取解决方法:

做到这一点:

root:
  - configuration:
    field_a: "aaaa"
    field_b: "bbbb"
  - child:
    - configuration:
        field_a: "aaa1"
        field_b: "bbb1"
  - child:
    - configuration:
        field_a: "aaa2"
        field_b: "bbb2"

python dict的输出是:

{'root': [{'configuration': None, 'field_b': 'bbbb', 'field_a': 'aaaa'}, {'child': [{'configuration': {'field_b': 'bbb1', 'field_a': 'aaa1'}}]}, {'child': [{'configuration': {'field_b': 'bbb2', 'field_a': 'aaa2'}}]}]}

现在做一些简单的编程,使它成为你的结构:-)

相关问题 更多 >

    热门问题