如何替换字符串python中的变量值?
我正在从事一个基于python的项目,其中公式存储在dB中。我的脚本将从特定列读取公式并存储在列表中。例如如何替换字符串python中的变量值?,python,Python,我正在从事一个基于python的项目,其中公式存储在dB中。我的脚本将从特定列读取公式并存储在列表中。例如 formula[0] = "round(float(latitude[:2]) + (float(latitude[2:]) / 60)" formula[1] = "round(float(longitude[:3]) + float(longitude[3:]) / 60),6)" formula[3] = "int(float(speed)*1.852)" 通过TCP套接字逗号分隔
formula[0] = "round(float(latitude[:2]) + (float(latitude[2:]) / 60)"
formula[1] = "round(float(longitude[:3]) + float(longitude[3:]) / 60),6)"
formula[3] = "int(float(speed)*1.852)"
通过TCP套接字逗号分隔的值如下
"imei:1234467454545,ac alarm,160302150105,,F,094605.000,A,1301.9905,N,08014.0746,E,0.19,298.01,,0,,,,;"
通过编码,我将逗号分隔的值拆分并存储在列表中。从数据流来看,“1301.9905”是纬度,“08014.0746”是经度,“0.19”是速度值
如何在公式中应用该值并将其存储在某个变量中?我试过这种方法
latitude = "1301.9905"
latitude = round(float(latitude[:2]) + (float(latitude[2:]) / 60),6)
print latitude
您可以将公式作为python模板存储在中,然后使用eval
执行它
from string import Template
formula = "round((float($latitude) + float($latitude))/60)"
template = Template(formula)
out = template.substitute(latitude="1301.995")
eval(out)
这里我使用eval
方法来执行函数
有关templates
check的更多信息,此操作不会执行公式。在许多情况下,eval
结尾处的eval
被视为邪恶。OP表示函数字符串将存储在数据库中,因此其他人可能也可以访问它eval
在不确定它可能是什么的情况下评估它可能是危险的。我强烈建议不要使用eval()
;如果有任何到数据库的注入路径,可以让Python以这种方式执行任意代码。使用asteval
代替。此外,如果您要将字符串解释为Python表达式,您也可以使用exec()
,这样您就可以传入locals()
,以便在表达式中使用,而无需任何替换。具体地说,看看asteval,这篇文章中的答案之一。它可以高效、安全地处理公式。如果套接字生成换行分隔的CSV行,则可以使用CSV
模块来处理拆分。