2012-07-05 30 views
10

¿Cómo encierro una variable entre comillas simples en python? ¡Probablemente sea muy simple, pero parece que no puedo conseguirlo! Necesito url-encode la variable term. Term se ingresa en un formulario por un usuario y se pasa a una función donde está codificada en la url term=urllib.quote(term). Si el usuario ingresó "apple computer" como su término, después de la codificación url sería "apple% 20comptuer". Lo que quiero hacer es tener el término rodeado por comillas simples antes de la codificación url, para que sea "'apple computer'" y después de la codificación url "% 23apple% 20computer% 23". Necesito pasar el término a una url y no funcionará a menos que use esta sintaxis. ¿Alguna sugerencia?Adjunta una variable en comillas simples en Python

Código de ejemplo:

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 

Respuesta

23

Existen tres maneras:

  1. concatenación de cadena

    term = urllib.quote("'" + term + "'") 
    
  2. cadena viejo estilo de formateo

    term = urllib.quote("'%s'" % (term,)) 
    
  3. cadena de estilo nuevo formato a

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

Gracias por la respuesta completa – adohertyd

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

debe ser lo que usted está buscando.

7

sólo puede utilizar cadena de interpolación:

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

¿Qué pasa con la adición de las comillas simples después de que se codifica url? ¿O simplemente agregándolos antes de la mano, codifica la función de arriba?

0

Me tropecé con algo de código hacerlo de esta manera:

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

(En este caso join() utiliza term como separador de combinar todos los elementos que fueron dados en el parámetro iterable en una sola cadena. Como solo hay dos elementos, simplemente se envuelven alrededor de una instancia de term).

Aunque es bastante legible, todavía lo consideraría un truco y menos legible que otras opciones. Por lo tanto, recomiendo el uso del formato de cadena como lo mencionaron otros:

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