爲了能夠添加/刪除/修改軟件配置,我需要解析一個配置文件文件,該文件由多個塊這樣的格式文本:將文本文件內容解析爲Python對象並將對象寫回可解析文本文件
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
模塊和代碼是非常簡單(一行到整個文件轉換成一個方便的詞典),但分析數據wasnt它到底應該是什麼:
>>> 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對象後進行讀取和寫入操作?
你看過pylens(http://pythonhosted.org/pylens/)嗎? – 2013-03-27 14:29:30
會[ConfigParser](http://docs.python.org/2/library/configparser.html)有幫助嗎? – 2013-03-27 14:36:12
@SidharthShah ConfigParser,如果我是正確的,只能以某種格式使用,不幸的是,它不匹配我正在處理的內容。 – SpankMe 2013-03-27 16:29:04