2012-07-05 28 views
10

Python'da tek tırnak içine bir değişkeni nasıl ekleyebilirim? Muhtemelen çok basit ama anlayamıyorum! term değişkenini URL olarak kodlamam gerekiyor. Term bir kullanıcı tarafından bir formda girilir ve term=urllib.quote(term) URL kodlu olduğu bir işleve iletilir. Kullanıcı terim olarak "elma bilgisayarı" girdiyse, URL'yi kodladıktan sonra "elma% 20 bilgisayar" olacaktır. Ne yapmak istediğim, URL'yi kodlamadan önce tek tırnak işareti ile çevrilmiş, böylece "'apple computer'" sonra URL'yi kodladıktan sonra "% 23apple% 20computer% 23" olacaktır. Terimi bir URL'ye iletmem gerekiyor ve bu sözdizimini kullanmadıkça çalışmayacak. Baska öneri?Bir değişkeni Python'daki tek tırnak içine alın

Örnek Kod:

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 

cevap

23

üç yolu vardır:

  1. dize birleştirme biçimlendirme

    term = urllib.quote("'%s'" % (term,)) 
    
  2. yeni tarzı dize biçimlendirme

    term = urllib.quote("'" + term + "'") 
    
  3. eski tarz dize

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

Kapsamlı yanıt için teşekkür ederiz. – adohertyd

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

aradığınız şey olmalı. o url kodlanmış sonra tek tırnak ekleyerek nesi var

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

sadece dize interpolasyon kullanabilir? Ya da sadece elden önce onları ekleyerek yukarıdaki işlevi kodlarsınız?

0

Sadece bu şekilde yapıyor bazı kod tökezledi:

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

(Bu durumda join() yılında tek dizede iterable parametrede verildi tüm unsurları birleştirmek için ayırıcı olarak term kullanır. Sadece iki eleman olduğu için, bunlar sadece bir örnek term'a sarılmıştır.)

Oldukça okunabilir olmasına rağmen, yine de diğer seçeneklerden daha iyi bir kesmek ve okunabilirliğini düşünebilirim. Bu nedenle, başkaları tarafından belirtildiği gibi dize biçimlendirmesinin kullanılmasını öneririm:

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