如何在转义字符串中插入变量?

2024-04-27 15:57:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在调用一个需要动态变量作为参数的API。但是,当字符串被三个引号和字符串文本开头的反斜杠转义字符包围时,我不知道如何格式化字符串以包含变量。你知道吗

我尝试过改变引号的数量并使用“.format()”函数。你知道吗

下面是以获得成功结果的方式格式化的代码:

payload = "{\n\t\"firm\": \"myfirm\",\n\t\"id\": \"f87987562\",\n\t\"data\": {\n\t\t\"tracking_preference\": 2\n\t} \n}\n"

以下是我尝试以更简洁的方式格式化字符串,同时还包括变量:

payload = \
    """{
    "firm": {0},
    "id": {1},
    "data": {
        "tracking_preference": {2}
    } 
}
""".format('myfirm', "f87987562", 2)

这是我收到的错误:

     19     } 
     20 }
---> 21 """.format('myfirm', "f87987562", 2)
     22 
     23 apikey = "secret_key"

KeyError: '\n    "firm"'

我怀疑它与反斜杠有关,但它的实现似乎是必要的。非常感谢您对这种字符串格式背后的直觉的任何帮助和见解。你知道吗

我正在尝试将字符串文本传递到请求函数:

response = requests.request("POST", url, data=payload, headers=headers)

Tags: 函数字符串文本idformatdata方式tracking
2条回答

如果您使用的是python 3.6+,则可以使用f字符串:

payload = \
    f"""{
    "firm": {"myfirm"},
    "id": {"f87987562"},
    "data": {
        "tracking_preference": {2}
    } 
}
"""

否则,最好使用字符串模板:

from string import Template

payload_t = Template(
    """{
    "firm": ${firm},
    "id": ${id},
    "data": {
        "tracking_preference": ${tracking}
    } 
}
""")

payload = payload_t.substitute(firm="myfirm", id="f87987562", tracking=2)

在格式字符串中,{}是特殊的。要嵌入文字括号,请使用{{}}。你知道吗

payload = """{{
    "firm": "{0}",
    "id": "{1}",
    "data": {{
        "tracking_preference": {2}
    }}
}}
""".format('myfirm', "f87987562", 2)

print(payload)

输出:

{
    "firm": "myfirm",
    "id": "f87987562",
    "data": {
        "tracking_preference": 2
    }
}

在Python 3.6+中,f字符串可以简化这一过程:

firm = 'myfirm'
id = 'f87987562'
tracking = 2

payload = f'''{{
    "firm": "{firm}",
    "id": "{id}",
    "data": {{
        "tracking_preference": {tracking}
    }}
}}'''

最后,json模块非常适合此特定场景:

import json

firm = 'myfirm'
id = 'f87987562'
tracking = 2

data = {'firm':firm,'id':id,'data':{'tracking_preference':tracking}}
payload = json.dumps(data,indent=2) # indent is optional for easy reading
print(payload)

输出:

{
  "firm": "myfirm",
  "id": "f87987562",
  "data": {
    "tracking_preference": 2
  }
}

相关问题 更多 >