2011-10-12 13 views

Respuesta

2
import cgi 
import urlparse 
url = "http://example.com/?a=text&q2=text2&q3=text3&q2=text4" 
qs = cgi.parse_qs(urlparse.urlparse(url)[4]) 
del(qs['q2']) 
print qs 

explícitamente ...

>>> import cgi 
>>> import urlparse 
>>> url = "http://example.com/?a=text&q2=text2&q3=text3&q2=text4" 
>>> qs = cgi.parse_qs(urlparse.urlparse(url)[4]) 
>>> del(qs['q2']) 
>>> print qs 
{'a': ['text'], 'q3': ['text3']} 
>>> 
+0

Finalizado primero encontrando la cadena de consulta (' urlparse.urlparse (url) [4] ') y luego simplemente dividiendo en' & ', comprobando para cada parámetro si comenzó con "q2 =" y eliminarlo de la cadena de consulta. Uniéndose a ellos en '&'. Esto también es preservar el orden, que también era un requisito para mí. Solo quería agregar mis pocos centavos más de 7 años después. – YnkDK

37
#!/usr/bin/env python 

from urllib import urlencode 
from urlparse import urlparse, urlunparse, parse_qs 

url = 'http://example.com/?a=text&q2=text2&q3=text3&q2=text4' 
u = urlparse(url) 
query = parse_qs(u.query) 
query.pop('q2', None) 
u = u._replace(query=urlencode(query, True)) 
print(urlunparse(u)) 
+0

Esta respuesta devuelve la url con la cadena de consulta eliminada cuando el OP solicitó – KingFu

+0

Esta es la única respuesta técnicamente correcta en este hilo. – ekta

+3

La mejor respuesta. Se puede usar un método adicional, [geturl] (https://docs.python.org/2/library/urlparse.html#urlparse.ParseResult.geturl) del objeto urlparse en lugar de urlunparse 'print (u.geturl()) ' – tug

-2
import re 
q ="http://example.com/?a=text&q2=text2&q3=text3&q2=text4" 
todelete="q2" 
#Delete every query string matching the pattern 
r = re.sub(r''+todelete+'=[a-zA-Z_0-9]*\&*',r'',q) 
#Delete the possible trailing # 
r = re.sub(r'&$',r'',r) 

print r 
+3

ahora tiene 2 problemas. –

11
import urlparse 

url = 'http://example.com/?a=text&q2=text2&q3=text3&q2=text4' 
urlparse.urljoin(url, urlparse.urlparse(url).path) 
3

El uso de la biblioteca de manipulación de URL de Python furl:

import furl 
f = furl.furl("http://example.com/?a=text&q2=text2&q3=text3&q2=text4") 
f.remove(['q2']) 
print(f.url) 
Cuestiones relacionadas