我有一个文件,开头类似于:
databaseCons = {
main = {
database = "readable_name",
hostname = "hostdb1.serv.com",
instances= {
slaves = {
conns = "8"
}
}
maxconns = "5",
user = "user",
pass = "pass"
}
}
所以,我想将其解析为一个子
dict
字典,类似于:
{'main': {'database': '可读名称', 'hostname': 'hostdb1.serv.com', 'maxconns': '5', 'instances': {'slave': {'maxCount': '8'}},'user': '用户', 'pass': '密码'}}
我认为以上内容很清晰明了...但如果不是,请随意进行编辑。基本上,我想要的等同于:conns = '8'
slave = dict()
slave['maxCount'] = conns
instances = dict()
instances['slave'] = slave
database = 'readable_name'
hostname = 'hostdb1.serv.com'
maxconns = '5'
user = 'user'
pas = 'pass'
main = dict()
main['database'] = database
main['hostname'] = hostname
main['instances'] = instances
main['maxconns'] = maxconns
main['user'] = user
main['pass'] = pas
databaseCons = dict()
databaseCons['main'] = main
有没有模块可以处理这种解析?即使是我上面建议的看起来也很混乱.. 我想一定有更好的方法。
json.loads
或ijson
作为后端。或者你可以描述语法,然后使用解析器库或解析器生成器(如PyParsing)应该很简单。 - abarnerteval
(其实你真的不应该这样做),至少使用ast.literal_eval
代替。这样可以消除安全漏洞,并且意味着如果你有意外的数据不符合这个模式,它更有可能失败或生成一个相对合理的错误信息,而不是使用eval
时那样。 - abarnert