使用文字 r 和变量 Python 创建一个字符串

Making a String with literal r and variables Python

我目前正在尝试为这样的事情制作抽象方法:

preset_create("TaggingAgain", r'{"weight": 0, "precondition": "{\"_tags\":\"tagged\"}"}')

在我的抽象中,用户能够在 Preset 对象中创建 Precondition 对象,然后创建该对象。

目前是这样的:

data = str({"weight" : preset.weight, "precondition" : "{}"})
data = data.replace("\'", "\"")
data = data.replace("}\"", "\"%(n)s\":\"%(v)s\"}" % {"n" : precondition.name,"v" : precondition.value})

(缩短版本,因为稍后我将添加能够使用 "for in" 添加多个先决条件)

我的问题是 {\"_tags\":\"tagged\"} 部分需要在 r'' 中才能工作,但当其中有变量时我不知道该怎么做.

其他可能有助于理解的代码:

class Precondition(object):

    def __init__(self, name, operator, value):
        self.name = name
        self.value = value


class Preset(object):

    def __init__(self, name, weight, *preconditions):
        self.name = name
        self.weight = weight
        self.preconditions = preconditions


precondition = Precondition("_tag", "", "tagged")
createdPreset = Preset("TaggingAgain", "0", precondition)
preset_create(createdPreset)

如果以后有人需要这个,我是这样做的(使用 json,gre_gor 在对我的问题的评论中发布了 link。

以字符串开头:

precon = ("{\"%(n)s\":\"%(v)s\"}" % {"n" : precondition.name,"v" : precondition.value})

获得它的另一种方法是将其添加到前提条件中:

def as_dict(self):
    return {self.name: self.value}

然后像这样使用它:

precons = str(precondition.as_dict())
precons = precons.replace("\'", "\"")

这两种方式都会给您留下这样的字符串:

{"_tag":"tagged"}

然后使用 json.dumps 执行与 r'' 相同的操作

precon = json.dumps(precon)

之后它应该是这样的:

"{\"_tag\":\"tagged\"}"

由于json.dumps在开头和结尾添加了",所以如果不需要它们,记得去掉它们。