10 Stimmen

Gibt es einen besseren Weg, diese URL-Manipulation in Python zu schreiben?

Ich bin neugierig, ob es einen einfacheren Weg, um einen bestimmten Parameter aus einer Url zu entfernen. Was ich mir ausgedacht habe, ist das Folgende. Dies scheint ein bisschen langatmig. Bibliotheken zu verwenden oder eine mehr pythonic Version geschätzt.

parsed = urlparse(url)
if parsed.query != "":
    params = dict([s.split("=") for s in parsed.query.split("&")])
    if params.get("page"):
        del params["page"]
    url = urlunparse((parsed.scheme,
                      None,
                      parsed.path,
                      None,
                      urlencode(params.items()),
                      parsed.fragment,))
    parsed = urlparse(url)

11voto

Marcelo Cantos Punkte 173498

Verwenden Sie urlparse.parse_qsl() um den Abfrage-String zu knacken. Sie können diese in einem Durchgang filtern:

params = [(k,v) for (k,v) in parse_qsl(parsed.query) if k != 'page']

0 Stimmen

Die Manipulation der URL scheint selbst mit Ihrer geringfügigen Änderung eine Qual zu sein.

0 Stimmen

@dnolen: Ich stimme zu. Pythons eingebaute Bibliotheken sind nicht besonders gut für einfache URI-Manipulation. (Haben Sie mich heruntergestimmt? Wenn ja, scheint es kaum vernünftig zu sein, jemanden aufgrund von Einschränkungen in der Sprache oder ihren Bibliotheken herabzustufen).

0 Stimmen

Ich habe Ihre Antwort heruntergestuft, weil Sie nicht auf das eigentliche Problem eingegangen sind und einige Leute anscheinend anderer Meinung sind. Auf jeden Fall wirkt sich das bei 14,3k Karma kaum auf Sie aus.

9voto

Ned Batchelder Punkte 342778

Ich habe eine kleine Hilfsklasse erstellt, um eine URL auf strukturierte Weise darzustellen:

import cgi, urllib, urlparse

class Url(object):
    def __init__(self, url):
        """Construct from a string."""
        self.scheme, self.netloc, self.path, self.params, self.query, self.fragment = urlparse.urlparse(url)
        self.args = dict(cgi.parse_qsl(self.query))

    def __str__(self):
        """Turn back into a URL."""
        self.query = urllib.urlencode(self.args)
        return urlparse.urlunparse((self.scheme, self.netloc, self.path, self.params, self.query, self.fragment))

Dann können Sie das tun:

u = Url(url)
del u.args['page']
url = str(u)

Mehr dazu: Web-Entwicklung nervt .

0 Stimmen

Ein vernünftiger Kompromiss. Weitaus nützlicher als urlparse würde ich sagen ;)

0 Stimmen

Ich habe einige Änderungen an dieser Klasse Dadurch wird es etwas einfacher zu benutzen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X