BASE_URL = 'http://foobar.com?foo=%s'
variable = 'bar'
final_url = BASE_URL % (variable)
我得到了这个'http://foobar.com?foo=bar'
#它忽略了内部字符串。
但我想要这样的事情'http://foobar.com?foo='bar''
感谢您的回答。
你能帮我解决几乎同样的问题:
lst = ['foo', 'bar', 'foo bar']
[str(l) for l in lst if ' ' in l]
我得['foo bar']
,但我希望它像[''foo bar'']
提前致谢。
答案 0 :(得分:7)
将您的BASE_URL
更改为
BASE_URL = "http://foobar.com?foo='%s'"
或
BASE_URL = 'http://foobar.com?foo=\'%s\''
答案 1 :(得分:6)
如果你正在使用URL参数,那么使用urllib.urlencode可能更安全:
import urllib
BASE_URL = 'http://foobar.com/?%s'
print BASE_URL % urllib.urlencode({
'foo': 'bar',
})
关于报价:为什么你明确地想要它们?通常,你的HTTP包装器会处理所有这些。
关于你的第二个问题:如果你绝对也希望在那里有引号,你仍然必须在追加包含的字符串时逃避它们,或者(可能更安全的方式)将使用repr(.. 。)
lst = ['foo', 'bar', 'foo bar']
lst2 = []
for l in lst:
if ' ' in l:
lst2.append(repr(l))
答案 2 :(得分:3)
看来,你对字符串文字的工作方式感到有些困惑。
当您说s = 'this is a string'
时,您正在为变量分配字符串。什么字符串?好吧,你在程序中硬编码的字符串文字。
Python使用撇号来表示字符串文字的开头和结尾 - 里面的是字符串的内容。
这可能是初学者编程的第一个难题之一:您在程序源代码中编写的内容与运行时实际发生的内容之间存在差异。您可能希望通过几个教程(我听说“潜入Python”非常好)。
答案 3 :(得分:1)
如果您希望在网址中显示单引号,可以使用
BASE_URL = 'http://foobar.com?foo=%s'
variable = "'bar'"
final_url = BASE_URL % (variable)
但是,如果变量来自某个地方(如用户输入),则此变体非常不安全。