私はこの文字列を正しく補間しようとしています:
/test/test?Monetization%20Source=%d&Channel%20Id=%d' % (mid, cid)
%20をそのままレンダリングし、%dを変数midおよびcidのプレースホルダーとして機能させたいと思います。どうすればよいですか?
私はこの文字列を正しく補間しようとしています:
/test/test?Monetization%20Source=%d&Channel%20Id=%d' % (mid, cid)
%20をそのままレンダリングし、%dを変数midおよびcidのプレースホルダーとして機能させたいと思います。どうすればよいですか?
一般的に、あなたは望むurllib.urlencode
:
import urllib
url = '/test/test?' + urllib.urlencode({
'Monetization Source': mid,
'Channel Id': cid,
})
これは定数文字列リテラルだと思いますか?もしそうなら、それは簡単です-あなたが保持したいパーセント記号を2倍にするだけです。
'/test/test?Monetization%%20Source=%d&Channel%%20Id=%d' % (mid, cid)
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()メソッドと組み込み関数は非常に柔軟で便利です。
'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
文字列リテラルに文字列自体の一部として中括弧{}が含まれている場合は、中括弧を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