我有一个像x = "http://query.yahooapis.com/v1/public/yql?q=select%20owner%2Curls%20from%20flickr.photos.info%20where%20photo_id%3D'%s'&format=json"
如果我x % 10
失败,因为%20f
等被视为格式字符串,所以我必须做一个字符串conactination。我怎样才能在这里使用普通的字符串替换。?
答案 0 :(得分:5)
对字符串进行urldecode,进行格式化,然后再次对其进行urlencode:
import urllib
x = "http://query.yahooapis.com/v1/public/yql?q=select%20owner%2Curls%20from%20flickr.photos.info%20where%20photo_id%3D'%s'&format=json"
tmp = urllib.unquote(x)
tmp2 = tmp % (foo, bar)
x = urllib.quote(tmp2)
正如一位评论者指出的那样,使用任意用户输入的字符串进行格式化作为格式规范在历史上是危险的,并且当然是个坏主意。
答案 1 :(得分:0)
否则你可以使用新风格的输出格式(自v 2.6起可用),它不依赖于%:
x = 'http://query.yahooapis.com/v1/public/yql?q=select%20owner%2Curls%20from%20flickr.photos.info%20where%20photo_id%3D{0}&format=json'
x.format(10)
它还具有不依赖于类型的进步。
答案 2 :(得分:0)
在python字符串格式中,使用%%
输出单个%字符(docs)。
>>> "%d%%" % 50
'50%'
所以您可以用%%替换所有%,除非您想在格式化期间替换。但是@Conrad Meyer的解决方案在这种情况下显然更好。