有这样一个问题
大概意思就是定义一个函数,清理一个嵌套list中的字符串数据,按照对应可以解析的数据类型进行转换。
正常情况下,大多数人的方法可能是用 try int,float, 加 if 判断,但是写起相当麻烦
这里用eval函数实现起来却非常省事。
def clean_data(data):
for sub_list in data:
for i in range(len(sub_list)):
try:
sub_list[i] = eval(sub_list[i])
except SyntaxError:
sub_list[i] = None
except NameError:
pass
d = [['abc', '123', '45.6', 'True', 'False']]
clean_data(d)
print(d)
d = [['ab2'], ['-123'], ['45.6'], ['False', '3.2']]
clean_data(d)
print(d)
[['abc', 123, 45.6, True, False]]
[['ab2'], [-123], [45.6], [False, 3.2]]
>>>
实际上eval函数可以看成下面这样实现的。
#!/usr/bin/python3
def eval(expression, scope=globals()):
scope['result'] = None
try:
exec('result = ' + expression, scope)
return scope['result']
except Exception as e:
print(e)
config={'modules': {'launcher': {'control_port': 8085}}}
print(eval('config["modules"]["launcher"]["control_port"]'))