2012-09-06 96 views
4

我想用python解析erlang配置文件。有没有一个模块?这个配置文件包含;用Python解析Erlang配置文件

[{webmachine, [ 
{bind_address, "12.34.56.78"}, 
{port, 12345}, 
{document_root, "foo/bar"} 
]}]. 
+1

为什么不火了一个Erlang SH让它为你做格式化?我知道,不是在python中,但它会捕获角落案例,并使python方面的解析变得非常简单。 – selle

+0

我没有建议python,但这是一个通过erl控制台和unix脚本进行验证的帖子http://stackoverflow.com/questions/13423387/how-do-i-validate-an-erlang-config-file -from-A-Linux的命令 – Eric

回答

4

未经测试,有点粗糙,但在你的例子“作品”

import re 
from ast import literal_eval 

input_string = """ 
[{webmachine, [ 
{bind_address, "12.34.56.78"}, 
{port, 12345}, 
{document_root, "foo/bar"} 
]}] 
""" 

# make string somewhat more compatible with Python syntax: 
compat = re.sub('([a-zA-Z].*?),', r'"\1":', input_string) 

# evaluate as literal, see what we get 
res = literal_eval(compat) 

[{'webmachine': [{'bind_address': '12.34.56.78'}, {'port': 12345}, 
{'document_root': 'foo/bar'}]}] 

然后你可以“卷起”字典的名单成一个简单的dict,如:

dict(d.items()[0] for d in res[0]['webmachine']) 

{'bind_address': '12.34.56.78', 'port': 12345, 'document_root': 
'foo/bar'}