在 Python 2 中是否有更简洁的方法来修改 URL 的某些部分?
例如
http://foo/bar -> http://foo/yah
目前,我正在这样做:
import urlparse
url = 'http://foo/bar'
# Modify path component of URL from 'bar' to 'yah'
# Use nasty convert-to-list hack due to urlparse.ParseResult being immutable
parts = list(urlparse.urlparse(url))
parts[2] = 'yah'
url = urlparse.urlunparse(parts)
有更清洁的解决方案吗?
不幸的是,该文档已经过时了;产生的结果urlparse.urlparse()
(and urlparse.urlsplit()
) use a collections.namedtuple()- 生产类 https://docs.python.org/2/library/collections.html#collections.namedtuple作为基地。
不要将此命名元组转换为列表,而是使用为此任务提供的实用程序方法:
parts = urlparse.urlparse(url)
parts = parts._replace(path='yah')
url = parts.geturl()
The namedtuple._replace() method https://docs.python.org/2/library/collections.html#collections.somenamedtuple._replace允许您创建替换特定元素的新副本。这ParseResult.geturl() method https://docs.python.org/2/library/urlparse.html#urlparse.ParseResult.geturl然后将这些部分重新连接到一个 url 中。
Demo:
>>> import urlparse
>>> url = 'http://foo/bar'
>>> parts = urlparse.urlparse(url)
>>> parts = parts._replace(path='yah')
>>> parts.geturl()
'http://foo/yah'
mgilson https://stackoverflow.com/users/748858/mgilson提交了一份错误报告(带补丁) http://bugs.python.org/issue21746以解决文档问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)