【问题标题】:Is there a better way to write this URL Manipulation in Python?有没有更好的方法来用 Python 编写这个 URL 操作?
【发布时间】:2011-02-21 20:09:02
【问题描述】:

我很好奇是否有更简单的方法可以从 url 中删除特定参数。我想出的是以下内容。这似乎有点冗长。使用的库或更 Pythonic 的版本表示赞赏。

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)

【问题讨论】:

    标签: python url parsing


    【解决方案1】:

    使用urlparse.parse_qsl()破解查询字符串。您可以一次性过滤:

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

    【讨论】:

    • 即使您进行了微小的更改,这里的 url 操作也似乎受到了折磨。
    • @dnolen:我同意。 Python 的内置库对于简单的 URI 操作并不是特别好。 (您是否对我投了反对票?如果是这样,由于语言或其库的限制,对某人投反对票似乎并不合理。)
    • 我投了反对票,因为您的回答没有试图解决实际问题,有些人似乎不这么认为。无论如何,在 14.3k 业力时,它几乎不会影响您。
    • 代表不是这里的问题;让我恼火的是,你认为我没有试图帮助解决你的问题。标题问题是:“有没有更好的方法来用 Python 编写这个 URL 操作?”我的回答正是提供了这一点。
    • @bvukelic:不,但是你必须写if x[0] …,这不是很清楚。
    【解决方案2】:

    我创建了一个小的帮助类来以结构化的方式表示一个 url:

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

    那么你可以这样做:

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

    更多信息:Web development peeve

    【讨论】:

    猜你喜欢
    • 2013-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-06
    • 2012-04-28
    • 1970-01-01
    • 2020-03-14
    相关资源
    最近更新 更多