如何在不计算Python表达式的前提下替换其中的变量值?
实现变量替换到表达式字符串的方法
你可以通过以下几种方式将变量值替换到表达式字符串中,生成可直接传递的目标字符串:
方法1:字符串格式化(最直接)
预先将表达式定义为带占位符的模板,使用str.format()传入变量值完成替换,适合变量数量明确的场景:
var1 = 'GOOGLE' var2 = '5' # 定义带占位符的模板,注意给字符串值添加引号 expr_template = 'df[df["{var1}"]>="{var2}"]' # 替换变量得到目标字符串 expr_replaced = expr_template.format(var1=var1, var2=var2) # 结果:'df[df["GOOGLE"]>="5"]'
方法2:使用string.Template(适配动态变量名)
如果表达式已经使用$变量名的格式,可以用string.Template结合局部变量字典批量替换:
from string import Template var1 = 'GOOGLE' var2 = '5' var3 = 'AMAZON' # 新增变量示例 # 表达式模板用$标记变量 expr = 'df[df["$var1"]>="$var2"][$var3]' # 用locals()获取当前所有局部变量,批量替换 template = Template(expr) expr_replaced = template.substitute(locals()) # 结果:'df[df["GOOGLE"]>="5"]["AMAZON"]'
方法3:正则表达式替换(适配无规律/大量变量)
如果变量数量不确定、命名无统一前缀,可用正则匹配所有变量名,结合局部变量动态替换,还能根据变量类型自动处理引号:
import re var1 = 'GOOGLE' var2 = 5 # 数字类型示例 var3 = 'AMAZON' expr = 'df[df[var1]>=var2][var3]' def replace_variable(match): var_name = match.group(1) # 从局部变量中获取对应值,不存在则保留原变量名 var_value = locals().get(var_name, var_name) # 字符串类型添加引号,其他类型直接转字符串 if isinstance(var_value, str): return f'"{var_value}"' return str(var_value) # 匹配所有合法变量名(如需排除df这类固定标识符可调整正则规则) expr_replaced = re.sub(r'\b([a-zA-Z_]\w*)\b', replace_variable, expr) # 结果:'df[df["GOOGLE"]>=5]["AMAZON"]'
内容的提问来源于stack exchange,提问作者Zing
相关产品推荐
相关产品推荐

