【问题标题】:use .format() in a string in two steps分两步在字符串中使用 .format()
【发布时间】:2016-08-28 21:36:35
【问题描述】:

我有一个字符串,我想在其中替换一些变量,但在不同的步骤中,例如:

my_string = 'text_with_{var_1}_to_variables_{var_2}'
my_string.format(var_1='10')
### make process 1
my_string.format(var_2='22')

但是当我尝试替换第一个变量时,我得到一个错误:

KeyError: 'var_2'

我怎样才能做到这一点?

编辑: 我想创建一个新列表:

name = 'Luis'
ids = ['12344','553454','dadada']
def create_list(name,ids):
    my_string = 'text_with_{var_1}_to_variables_{var_2}'.replace('{var_1}',name)
    return [my_string.replace('{var_2}',_id) for _id in ids ]

这是所需的输出:

['text_with_Luis_to_variables_12344',
 'text_with_Luis_to_variables_553454',
 'text_with_Luis_to_variables_dadada']

但使用 .format 而不是 .replace。

【问题讨论】:

  • 不太清楚你在这里要做什么。你打算在这两个步骤之间以某种方式使用my_string 吗?
  • 你能解释一下你到底想要完成什么吗?这似乎是一个XY 问题。
  • partial string formatting的可能重复
  • 我添加了一些方法,您可能会觉得有用
  • @DanielRoseman 我分两步考虑,因为第二个变量是一个列表。我更新了问题。

标签: python string string-formatting


【解决方案1】:

简单来说,您不能使用format 替换字符串中格式为{var_1}var_2 的少数参数(不是全部)。尽管我不确定您为什么只想替换部分字符串,但您可以采用几种方法作为解决方法:

方法 1: 将您要在第​​二步替换的变量替换为 {{}} 而不是 {}。例如:将{var_2}替换为{{var_2}}

>>> my_string = 'text_with_{var_1}_to_variables_{{var_2}}'
>>> my_string = my_string.format(var_1='VAR_1')
>>> my_string
'text_with_VAR_1_to_variables_{var_2}'
>>> my_string = my_string.format(var_2='VAR_2')
>>> my_string
'text_with_VAR_1_to_variables_VAR_2'

方法 2: 使用format 替换一次,使用% 替换另一个。

>>> my_string = 'text_with_{var_1}_to_variables_%(var_2)s'
# Replace first variable
>>> my_string = my_string.format(var_1='VAR_1')
>>> my_string
'text_with_VAR_1_to_variables_%(var_2)s'
# Replace second variable
>>> my_string  = my_string % {'var_2': 'VAR_2'}
>>> my_string
'text_with_VAR_1_to_variables_VAR_2'

方法 3:args 添加到 dict 并在需要时解压。

>>> my_string = 'text_with_{var_1}_to_variables_{var_2}'
>>> my_args = {}
# Assign value of `var_1`
>>> my_args['var_1'] = 'VAR_1'
# Assign value of `var_2`
>>> my_args['var_2'] = 'VAR_2'
>>> my_string.format(**my_args)
'text_with_VAR_1_to_variables_VAR_2'

使用满足您要求的那个。 :)

【讨论】:

    【解决方案2】:

    你必须使用格式吗?如果没有,您可以使用 string.replace 吗?喜欢

    my_string = 'text_with_#var_1#_to_variables_#var2#'
    my_string = my_string.replace("#var_1#", '10')
    ###
    my_string = my_string.replace("#var2#", '22')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-11
      • 2016-11-05
      • 2011-03-15
      • 2019-04-27
      • 1970-01-01
      相关资源
      最近更新 更多