【问题标题】:Equivalent urllib.parse.quote() in python 2.7python 2.7 中的等效 urllib.parse.quote()
【发布时间】:2016-02-02 09:45:46
【问题描述】:

urllib.parse.quote的等价物是什么

urllib.urlencode()

谢谢

【问题讨论】:

    标签: python python-2.7 python-3.x


    【解决方案1】:

    我认为您正在寻找urllib.pathname2url。比较:

    Python 3,urllib.parse.quote

    >>> urllib.parse.quote('abc def/foo?bar=baz')
    'abc%20def/foo%3Fbar%3Dbaz'
    

    Python 2,urllib.pathname2url

    >>> urllib.pathname2url('abc def/foo?bar=baz')
    'abc%20def/foo%3Fbar%3Dbaz'
    

    我的行为似乎与我相似,但它们可能略有不同。

    编辑:

    阅读您对 Algina 帖子的评论,我认为这是我构建 url 的首选方式:

    >>> url = 'http://dev.echonest.com/api/v4/song/search'
    >>> params = {'api_key': 'xxxx', 'format': 'json', 'artist': 'Galaxie 500'}
    >>> "{}?{}".format(url, urllib.urlencode(params))
    'http://dev.echonest.com/api/v4/song/search?api_key=xxxx&artist=Galaxie+500&format=json'
    

    【讨论】:

    • 谢谢,我试试
    【解决方案2】:

    实际上使用库six,它是为兼容python2/python3而设计的,你可以这样做

    import six.moves.urllib as urllib 
    
    # and now you can use urllib as it was python3
    urllib.quote(...) 
    

    如果你只想要python2,其实直接urllib.quote

    【讨论】:

    • 嗨@allan.simon,我已经安装了six (1.10.0) 包,我得到了AttributeError: 'Module_six_moves_urllib' object has no attribute 'quote'.. 知道为什么吗?
    • 看来我需要urllib.parse.quote(...)(实际上我需要urllib.parse.quote_plus(...))。
    • 这是因为 six.moves.urllib 命名空间实现了 Python3 的 urllib 命名空间。这是为了鼓励人们在仍然处于 Py2 环境中时以兼容 Py3 的方式编写代码。
    【解决方案3】:

    你能说得更具体点吗? 你有 urllib.parse.quote_plus(...) urllib.parse.quote_from_bytes(...) urllib.parse.unquote(...) 就像你提到的

    在此处查看文档: https://docs.python.org/3.2/library/urllib.parse.html

    【讨论】:

    • 谢谢,我有req = 'http://dev.echonest.com/api/v4/song/search?api_key=xxxx&format=json&artist=' + urllib.parse.quote(artist)artist = "Oasis"
    猜你喜欢
    • 2012-04-28
    • 2017-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多