我需要解析一个配置文件文件,以便能够添加/删除/修改软件配置,该配置由多个格式的文本块定义,如下所示:
portsbuild {
path = /jails/portsbuild;
allow.mount;
mount.devfs;
host.hostname = portsbuild.home;
ip4.addr = 192.168.0.200;
interface = nfe0;
exec.start = "/bin/sh /etc/rc";
exec.stop = "/bin/sh /etc/rc.shutdown";
}
这些块是相当重复的,到目前为止,只有变量的值在变化。
我尝试过使用该re
模块,但最终得到的代码过于臃肿和复杂。然后我尝试了该iscpy
模块,代码非常简单(一行将整个文件转换为方便的字典),但解析的数据并不完全是它应该是的:
>>> conf = iscpy.ParseISCString(open('/etc/jail.conf', 'r').read())
>>> conf
{'portsbuild': {'allow.mount': True, 'interface = nfe0': True, 'exec.start = "/bin/sh /etc/rc"': True, 'ip4.addr': '= 192.168.0.200', 'exec.stop': '= "/bin/sh /etc/rc.shutdown"', 'exec.stop = "/bin/sh /etc/rc.shutdown"': True, 'ip4.addr = 192.168.0.200': True, 'path': '= /jails/portsbuild', 'interface': '= nfe0', 'path = /jails/portsbuild': True, 'mount.devfs': True, 'host.hostname': '= portsbuild.home', 'host.hostname = portsbuild.home': True, 'exec.start': '= "/bin/sh /etc/rc"'}}
我也试过我的运气,pyparsing
但它似乎只适合一种方式。所以,我想知道是否有其他模块或方法可以使用干净且易于理解的代码来解析该文件,这两种方式都可以使用,用于在修改 python 对象后读取和写入?