Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何替换字符串python中的变量值?_Python - Fatal编程技术网

如何替换字符串python中的变量值?

如何替换字符串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套接字逗号分隔

我正在从事一个基于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套接字逗号分隔的值如下

"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
模块来处理拆分。