2024-09-29 21:25:01 发布
网友
我这样从配置文件中读取数据:
ip_vlan1 = "10.10.($id+100).5" ip_vlan2 = "10.11.($id*2+1).6" v.v...
对于每个vlan,我要根据ID和vlan表达式计算其vlan地址:
示例:
def(3, ip_vlan1) --> result: "10.10.103.5" def(5, ip_vlan2) --> result: "10.11.11.6"
你有解决办法吗?在
先谢谢你们,伙计们!在
如果你确定你只有'id',那么你可以这样做。在
def replace(id, vlan_exp): vlan_exp = vlan_exp.replace('$id',str(id)) return ".".join(map(str,map(eval,vlan_exp.split('.'))))
但是使用eval和eval会对你的程序有害。在
def calculate_vlan_id(id, vlan_exp): vlan_exp_list = vlan_exp.split(".") vlan_exp_list[2].replace("$id", id); vlan_exp_list[2] = eval(vlan_exp_list[2]) return '.'.join(vlan_exp_list) # string
你可以使用文本模板引擎。(这比使用基于eval的技巧更安全)。在
下面是一个使用genshi的示例
from genshi.template import TextTemplate ip_vlan1 = TextTemplate("10.10.${id+100}.5") ip_vlan2 = TextTemplate("10.11.${2*id+1}.6") print( ip_vlan1.generate(id=3) ) # prints 10.10.103.5 print( ip_vlan2.generate(id=5) ) # prints 10.11.11.6
如果您真的需要calculate_vlan_id函数,它将如下所示:
calculate_vlan_id
编辑:
根据要求,这里有一个使用jinja2的示例:这可能不是实现此目的的最佳方法,jinja2文档非常大且令人困惑。在
ip_vlan1 = jinja2.Template('10.10.{{id+100}}.5') ip_vlan2 = jinja2.Template('10.11.{{2*id+1}}.6') ip_vlan1.render(id=3) ip_vlan2.render(id=5)
这两种方法未经测试
如果你确定你只有'id',那么你可以这样做。在
但是使用eval和eval会对你的程序有害。在
你可以使用文本模板引擎。(这比使用基于eval的技巧更安全)。在
下面是一个使用genshi的示例
如果您真的需要
^{pr2}$calculate_vlan_id
函数,它将如下所示:编辑:
根据要求,这里有一个使用jinja2的示例:这可能不是实现此目的的最佳方法,jinja2文档非常大且令人困惑。在
这两种方法未经测试
相关问题 更多 >
编程相关推荐