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
相关产品推荐
相关产品推荐

