2011-10-12 18 views

risposta

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 

esplicitamente ...

>>> 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

Finito per prima cosa trovando la stringa di query (' urlparse.urlparse (url) [4] ') e poi semplicemente dividendo su' & ', controllando per ogni parametro se è iniziato con "q2 =" e rimuoverlo dalla stringa di query. Unendoli nuovamente a '&'. Questo è anche il mantenimento degli ordini, che era un requisito anche per me. Volevo solo aggiungere i miei pochi centesimi più di 7 anni dopo. – 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

Questa risposta restituisce l'url con la stringa di query rimossa come richiesto dall'OP – KingFu

+0

Questa è l'unica risposta tecnicamente corretta in questo thread. – ekta

+3

La migliore risposta. È possibile utilizzare un metodo addizionale, [geturl] (https://docs.python.org/2/library/urlparse.html#urlparse.ParseResult.geturl) di urlparse invece di 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

ora hai 2 problemi. –

11
import urlparse 

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

utilizzando la libreria di manipolazione URL del pitone furl:

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