1

我正在尝试正确插入此字符串:

/test/test?Monetization%20Source=%d&Channel%20Id=%d' % (mid, cid)

我希望 %20 按原样呈现,而 %d 用作变量 mid 和 cid 的占位符。我该怎么做呢?

4

4 回答 4

10

一般来说,你想要urllib.urlencode

import urllib
url = '/test/test?' + urllib.urlencode({
  'Monetization Source': mid,
  'Channel Id': cid,
})
于 2011-09-12T17:57:48.430 回答
2

我认为这是一个常量字符串文字?如果是这样,这很容易 - 只需将您想要保留的百分号加倍。

'/test/test?Monetization%%20Source=%d&Channel%%20Id=%d' % (mid, cid)
于 2011-09-12T17:55:25.263 回答
1

从 Python 2.6 开始,您可以使用Format Specification Mini-Language,它比旧的(但仍受支持) % 运算符更强大。

>>> mid=4
>>> cid=6
>>> "/test/test?Monetization%20Source={0:d}&Channel%20Id={1:d}".format(mid, cid) 
'/test/test?Monetization%20Source=4&Channel%20Id=6'

省略整数的 :d 默认为 str()

从 Python 2.7 和 3.2 开始,您可以省略参数索引:

>>> "...ce={:d}&Channel%20Id={:d}"...

但是看手册,format() 方法和内置函数非常灵活和有用。

于 2011-09-12T17:56:29.783 回答
0

使用 'f-string'(在 Python 3.6 中引入),更容易实现插值。

f-string 或 formatted-string 提供了一种使用最小语法格式化字符串的方法。'f' 或 'F' 用作前缀,花括号 { } 用作占位符。

mid=1.1
cid=1.2

print(f"Default:\n /test/test?Monetization%20Source={mid}&Channel%20Id={cid}")

你的输出将是,

Default:
 /test/test?Monetization%20Source=1.1&Channel%20Id=1.2

如果字符串文字有花括号 { } 作为字符串本身的一部分,那么您必须将大括号加倍以让解释器知道大括号是字符串文字的一部分而不是占位符。

print(f"With curly braces:\n /test/test?{{Monetization}}%20Source={mid}&Channel%20Id={cid}")

在这里,{Monetization} 是字符串文字本身的一部分,因此额外的花括号用作 {{Monetization}}

输出是,

With curly braces:
 /test/test?{Monetization}%20Source=1.1&Channel%20Id=1.2
于 2020-06-30T10:08:32.387 回答