python文本解析里面的内容_将文本文件内容解析为Python对象并将对象写回可解析文本fi...

救援用的欧芹!它似乎是编写自定义解析器的最简单的模块,并使用python对象生成结果,这些对象很容易转换回相同格式的配置文件。以下小方块的样品溶液:from parsley import makeGrammar, unwrapGrammar

from collections import OrderedDict

configFileGrammer = r"""

file = block+:bs end -> OrderedDict(bs)

block = ws name:b ws '{' ws members:m ws '}' ws -> (b, OrderedDict(m))

members = (setting:first (ws setting)*:rest ws -> [first] + rest) | -> []

setting = pair | flag

pair = ws name:k ws '=' ws name:v ws ';' ws -> (k, v)

flag = ws name:k ws ';' ws -> (k, True)

name = :n -> n.strip()

"""

testSource = r"""

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";

}

web01 {

path = /jails/web01;

allow.mount;

mount.devfs;

host.hostname = web02.site.com;

ip4.addr = 10.0.0.1;

interface = eth0;

exec.start = "/bin/sh /etc/rc";

}

db01 {

path = /jails/db01;

mount.devfs;

host.hostname = db01.home;

ip4.addr = 192.168.6.66;

interface = if0;

exec.start = "/bin/mysql";

}

"""

ConfigFile = makeGrammar(configFileGrammer, globals(), name="ConfigFile")

config = unwrapGrammar(ConfigFile)(testSource).apply('file')[0]

for block in config:

print "%s {" % block

for key in config[block]:

if config[block][key] == True:

print "\t%s;" % key

else:

print "\t%s = %s;" % (key, config[block][key])

print "}"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值