python - 在 Python 2 中修改 URL 组件

标签 python url python-2.x urlparse

在 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()(和 urlparse.urlsplit())产生的结果使用 collections.namedtuple()-produced class作为基地。

不要将这个 namedtuple 变成一个列表,而是使用为这个任务提供的实用方法:

parts = urlparse.urlparse(url)
parts = parts._replace(path='yah')

url = parts.geturl()

namedtuple._replace() method让您创建一个替换了特定元素的新副本。 ParseResult.geturl() method然后将这些部分重新加入到一个 url 中。

演示:

>>> import urlparse
>>> url = 'http://foo/bar'
>>> parts = urlparse.urlparse(url)
>>> parts = parts._replace(path='yah')
>>> parts.geturl()
'http://foo/yah'

mgilson提交了 bug report (with patch)解决文档问题。

关于python - 在 Python 2 中修改 URL 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24200988/

相关文章:

python - Modbus错误: [Invalid Message] Incomplete message received,至少应为2个字节(已收到0个)

javascript - 从 url 获取值

python - ZipFile.testzip() 在 Python 2 和 Python 3 上返回不同的结果

python - 通过 Python 与 Windows 控制台应用程序交互

python - PySpark distinct().count() 在 csv 文件上

url - 从 Go 中的 url 资源读取

来自外部部分的 Python ConfigParser 插值

python - 包含特殊字符的列表

Python 3 - 导入错误 : No module named

java - Spring Boot 中的白色标签错误!可能是 URL 无法到达 Controller