用文字r和变量Python

时间:2016-10-11 13:24:17

标签: python string-literals

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

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)

1 个答案:

答案 0 :(得分:0)

如果将来有其他人需要这个,那么我是怎么做到的(使用json,gre_gor在我的问题的评论中发布了一个链接)。

从字符串开始:

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

另一种获得此方法的方法是将其添加到Precondition:

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

然后像这样使用它:

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

这两种方式都应该留下这样的字符串:

{"_tag":"tagged"}

然后使用json.dumps做同样的事情,即''会做的

precon = json.dumps(precon)

之后它应该是这样的:

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

因为json.dumps添加"在开始和结束时,如果你不需要它们,请记得摆脱它们。