Python 2.7 中相当于 urllib.parse.quote() 的函数是什么?

16
urllib.parse.quote的中文对应是什么?
urllib.urlencode()吗?
谢谢。
3个回答

18

我认为你正在寻找 urllib.pathname2url。对比一下:

Python 3中,urllib.parse.quote

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

Python 2, urllib.pathname2url:


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'

谢谢,我会尝试的。 - timothylhuillier

16

通过使用专门为Python2/Python3兼容性设计的库six,您可以实现...

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'对象没有属性'quote'的问题。你有什么想法吗? - Tom Hunter
1
似乎我需要使用 urllib.parse.quote(...)(实际上在我的情况下我需要使用 urllib.parse.quote_plus(...))。 - Tom Hunter
这是因为six.moves.urllib命名空间实现了Python3的urllib命名空间。这样做是为了鼓励在Py2环境中以Py3兼容的方式编写代码。 - cowbert

0

谢谢, 我有req = 'http://dev.echonest.com/api/v4/song/search?api_key=xxxx&format=json&artist=' + urllib.parse.quote(artist)artist = "Oasis" - timothylhuillier

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接