2012-07-05 35 views
10

変数を一重引用符で囲むにはどうすればよいですか?それはおそらく非常に簡単ですが、私はそれを得るように見えることはできません!変数termをurl-encodeする必要があります。 Termはユーザーによってフォームに入力され、URLエンコードされたterm=urllib.quote(term)の関数に渡されます。ユーザが用語として「apple computer」を入力した場合、url-encoding後に「apple%20comptuer」となります。私がしたいのは、url-encoding "%23apple%20computer%23"の後に "apple computer"となるように、URLコーディングの前にシングルクォートで囲まれた用語を持つことです。私はこの言葉を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

は、3つの方法があります。

  1. 文字列連結の書式

    term = urllib.quote("'%s'" % (term,)) 
    
  2. 新しいスタイルの文字列をフォーマット

    term = urllib.quote("'" + term + "'") 
    
  3. 古いスタイルの文字列を

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

包括的な回答ありがとうございます – adohertyd

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

は、あなたが探しているものであるべき。それはURLエンコードされた後に単一引用符を追加すると間違って何

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

あなただけの文字列補間を使用することができますか?または、上記の関数をエンコードする前にそれらを追加するだけですか?

0

私はちょうどこのようにそれをやっていくつかのコードにつまずい:

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

(この場合join()は、1つの文字列に反復可能なパラメータで指定されたすべての要素を組み合わせてセパレータとしてterm使用しています。 2つの要素しかないので、それらは単にtermの1つのインスタンスにラップされています)。

かなり読みやすいですが、私はまだそれを他のオプションよりもハックと読みにくいと考えています。したがって、私は文字列書式の使用を推奨します。

term = urllib.quote("'{}'".format(term)) 
関連する問題