You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中f-string变量与空格使用:YAML替换失效解决

问题描述

想要用Python修改YAML文件reg.yaml中的内容,将filter_sql_expr: True替换为带换行和前置空格的指定格式,但当前代码执行后未达到预期效果,输出与原文件内容一致。

原reg.yaml内容:

row_filters:
  NONE:
    filter_sql_expr: True
rule_dimensions:
  - consistency
  - correctness
  - duplication
  - completeness
  - conformance
  - integrity
  - accuracy

当前使用的代码:

f = open("C:\Users\dd00849401\Documents\yamls\reg.yaml", 'r')
filter_exp = 'True'
newf = f.read().replace(f'filter_sql_expr: {filter_exp}', f"""filter_sql_expr:|- '' '' '' '' '' '' '' '' '' ''{filter_exp}""")
f.close()
with open('C:\Users\dd00849401\Documents\yamls\updated_test.yaml', 'w') as ff:
    ff.write(newf)
    ff.close()

当前输出:

row_filters:
  NONE:
    filter_sql_expr: True

期望输出:

row_filters:
  NONE:
    filter_sql_expr:|- 
          True
解决方案

问题根源在于替换字符串的格式错误:用空字符串''无法生成实际空格,且缺少必要的换行符,同时路径字符串未处理转义问题。

修改后的代码如下:

f = open(r"C:\Users\dd00849401\Documents\yamls\reg.yaml", 'r')
filter_exp = 'True'
# 定义原字符串和目标替换字符串
original_str = f'filter_sql_expr: {filter_exp}'
target_str = f'filter_sql_expr:|-\n        {filter_exp}'
newf = f.read().replace(original_str, target_str)
f.close()
with open(r'C:\Users\dd00849401\Documents\yamls\updated_test.yaml', 'w') as ff:
    ff.write(newf)

关键修改说明

  • 直接用\n添加换行,用实际的8个空格(对应期望的缩进量)代替空字符串,生成符合要求的YAML格式。
  • 在文件路径前加r,将其转为原始字符串,避免路径中的\U等字符被误解析为Unicode转义符。
  • 拆分原字符串和目标字符串的定义,让代码更清晰,降低出错概率。

执行修改后的代码,即可得到符合预期的YAML内容。

内容的提问来源于stack exchange,提问作者RoxaneFelton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 08:22:49