2012-07-05 25 views
10

如何在python中的單引號內包含變量?這可能很簡單,但我似乎無法得到它!我需要對變量term進行網址編碼。 Term由用戶輸入到表單中,並傳遞給一個函數,在該函數中進行網址編碼term=urllib.quote(term)。如果用戶輸入「蘋果電腦」作爲他們的術語,在URL編碼之後它將是「apple%20comptuer」。我想要做的是在URL編碼之前使用單引號將術語包圍起來,以便在URL編碼「%23apple%20computer%23」之後使用「apple computer」。我需要將這個術語傳遞給一個url,除非我使用這個語法,否則它將不起作用。有什麼建議麼?在Python中用單引號括起變量

示例代碼:

import urllib2 
import requests  

def encode(): 
     import urllib2 
     query= avariable #The word this variable= is to be enclosed by single quotes 
     query = urllib2.quote(query) 
     return dict(query=query) 

def results(): 

    bing = "https://api.datamarket.azure.com/Data.ashx/Bing/SearchWeb/Web?Query=%(query)s&$top=50&$format=json" 
    API_KEY = 'akey' 

    r = requests.get(bing % encode(), auth=('', API_KEY)) 
    return r.json 

回答

23

有三種方式:

  1. 字符串連接

    term = urllib.quote("'" + term + "'") 
    
  2. 舊式的字符串格式化

    term = urllib.quote("'%s'" % (term,)) 
    
  3. 新型字符串格式化

    term = urllib.quote("'{}'".format(term)) 
    
+0

謝謝您的全面回答 – adohertyd 2012-07-05 19:31:43

3
def wrap_and_encode(x): 
    return encode("'%s'" % x) 

應該是你在找什麼。

7

您可以只使用字符串插值:

>>> term = "foo" 
>>> "'%s'" % term 
"'foo'" 
2

這有什麼錯加上單引號它被URL編碼後?或者,只需在你手上添加它們就可以編碼上面的功能?

0

我只是偶然發現了一些代碼做這種方式:

term = urllib.quote(term.join(("'", "'"))) 

(在這種情況下join()使用term作爲分隔符來給予的迭代參數爲一個字符串的所有元素結合起來。由於只有兩個元素,它們只是圍繞着term的一個實例。)

儘管它非常易讀,但我仍然認爲它是一種黑客攻擊,並且其可讀性比其他選項差。因此,我建議使用其他人提到的字符串格式:

term = urllib.quote("'{}'".format(term))