2009-04-06 3 views
1
BASE_URL = 'http://foobar.com?foo=%s' 

variable = 'bar' 

final_url = BASE_URL % (variable) 

J'obtiens ceci 'http://foobar.com?foo=bar' # Elle ne tient pas compte de la chaîne intérieure.Chaîne à l'intérieur d'une chaîne

Mais je voulais quelque chose comme ça 'http://foobar.com?foo='bar''

Merci pour la réponse.

Pouvez-vous me aider avec presque le même problème:

lst = ['foo', 'bar', 'foo bar'] 

[str(l) for l in lst if ' ' in l] 

-je obtenir ['foo bar'] mais je voulais comme [''foo bar'']

Merci à l'avance.

+0

Pourquoi voulez-vous absolument les citations là-bas en premier lieu? –

+0

En fait, j'essaie d'utiliser l'API de recherche de twitter pour obtenir les résultats de recherche liés à mes mots-clés. Mais quand il ya un espace à l'intérieur d'une chaîne de recherche, il demande comme http://foobar.com?q=foo+OR+bar+OR+'foo bar ' – aatifh

+0

Ahh OK :-) S'il vous plaît toujours aussi écrire pourquoi vous voulez obtenir un certain comportement de votre code.Cela rend plus facile à saisir votre problème entier :-) –

Répondre

6

Si vous travaillez avec des paramètres d'URL, il est probablement plus sûr d'utiliser urllib.urlencode:

import urllib 

BASE_URL = 'http://foobar.com/?%s' 
print BASE_URL % urllib.urlencode({ 
    'foo': 'bar', 
}) 

En ce qui concerne les citations: Pourquoi les voulez-vous explicitement? Normalement, votre wrapper HTTP gérerait tout cela pour vous. En ce qui concerne votre 2ème question: Si vous voulez absolument aussi avoir les guillemets, vous devez toujours leur échapper en ajoutant la chaîne contenue, ou (probablement la façon la plus sûre de le faire) utiliser repr (. ..)

lst = ['foo', 'bar', 'foo bar'] 
lst2 = [] 

for l in lst: 
    if ' ' in l: 
     lst2.append(repr(l)) 
7

Changer votre BASE_URL soit

BASE_URL = "http://foobar.com?foo='%s'" 

ou

BASE_URL = 'http://foobar.com?foo=\'%s\'' 
3

Il semble, vous êtes un peu confus sur la façon dont les chaînes littérales travail.

Lorsque vous indiquez s = 'this is a string', vous affectez une chaîne à une variable. Quelle chaîne? Eh bien, un littéral de chaîne que vous avez codé en dur dans votre programme.

Python utilise les apostrophes pour indiquer le début et la fin d'un littéral de chaîne - avec étant le contenu de la chaîne. Ceci est probablement l'un des premiers problèmes difficiles pour les débutants en programmation: Il y a une différence entre ce que vous écrivez dans le code source de vos programmes et ce qui se passe réellement au moment de l'exécution. Vous pourriez vouloir travailler à travers quelques tutoriels (j'entends "Plongez dans Python" est assez bon).

+0

Merci pour vos suggestions. – aatifh

1

Si vous voulez des guillemets simples apparaissent dans l'URL, vous pouvez utiliser

BASE_URL = 'http://foobar.com?foo=%s' 
variable = "'bar'" 
final_url = BASE_URL % (variable) 

Mais cette variante est assez précaire, si la variable vient de quelque part (comme entrée utilisateur).