import re
def test ( var ):
op="""
1/1/1/1 up up :99005 53476 99005 g993-2-17a
1/1/1/2 up up :99005 53148 99005 g993-2-17a
1/1/1/3 up up :99005 53793 99005 g993-2-17a
"""
op=op.splitlines()
for line in op:
pattern = "([0-9]+/[0-9]+/[0-9]+/[0-9]+) *?([a-z]+) *?([a-z]+) :([0-9]+) +?([0-9]+) +?([0-9]+) +?([a-z0-9-]+)"
if re.search(pattern, line):
match=re.search(pattern, line)
var1=re.sub(r'/', '_', match.group(1))
x = var+"_"+ var1
print x
if_index = match.group(1)
adm_state = match.group(2)
exec("global %s" % (x))
exec("%s = {}" % (x))
exec("%s['whole']=match.group(0)" % (x))
exec("%s['if_index']=match.group(1)" % (x))
exec("%s['adm_state']=match.group(2)" % (x))
exec("%s['opr_state']=match.group(3)" % (x))
exec("%s['tx_rate_us']=match.group(5)" % (x))
exec("%s['tx_rate_ds']=match.group(6)" % (x))
exec("%s['op_mode']=match.group(7)" % (x))
print info_1_1_1_1['if_index']
test("info")
print info_1_1_1_1
嗨,大家都是Python和脚本的新手。以上是我的脚本,我的目的是为相应的词典创建多个字典,并为相应的字典分配键和值对。对于每行,我想创建单独的字典。我想从Global Space上使用同名的字典。如果有什么不清楚的话,我会纠正它。
在全球空间中,我想访问字典,例如info_1_1_1_1 ['thoth']
global
在两个exec
调用之间不持续。这将有效:
exec("global barnbar=3n")
但是变量的动态设置是强烈的代码气味。每当您发现自己做类似的事情时,您都应该立即停止并重新评估是否有另一种方法来做到这一点。在这种情况下,我建议使用词典:
import re
data = {}
def test ( var ):
op="""
1/1/1/1 up up :99005 53476 99005 g993-2-17a
1/1/1/2 up up :99005 53148 99005 g993-2-17a
1/1/1/3 up up :99005 53793 99005 g993-2-17a
"""
op=op.splitlines()
for line in op:
pattern = "([0-9]+/[0-9]+/[0-9]+/[0-9]+) *?([a-z]+) *?([a-z]+) :([0-9]+) +?([0-9]+) +?([0-9]+) +?([a-z0-9-]+)"
if re.search(pattern, line):
match=re.search(pattern, line)
var1=re.sub(r'/', '_', match.group(1))
x = var+"_"+ var1
print(x)
data[x] = {
"whole": match.group(0),
"if_index": match.group(1),
"adm_state": match.group(2),
"opr_state": match.group(3),
"tx_rate_us": match.group(5),
"tx_rate_ds": match.group(6),
"op_mode": match.group(7),
}
print(data["info_1_1_1_1"]['if_index'])
test("info")
print(data["info_1_1_1_1"])