【发布时间】:2016-02-02 09:45:46
【问题描述】:
urllib.parse.quote的等价物是什么
是urllib.urlencode()?
谢谢
【问题讨论】:
标签: python python-2.7 python-3.x
urllib.parse.quote的等价物是什么
是urllib.urlencode()?
谢谢
【问题讨论】:
标签: python python-2.7 python-3.x
我认为您正在寻找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'
【讨论】:
实际上使用库six,它是为兼容python2/python3而设计的,你可以这样做
import six.moves.urllib as urllib
# and now you can use urllib as it was python3
urllib.quote(...)
如果你只想要python2,其实直接urllib.quote
【讨论】:
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 的方式编写代码。
你能说得更具体点吗?
你有
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"