【问题标题】:add a string in middle of a url [closed]在网址中间添加一个字符串[关闭]
【发布时间】:2016-09-21 13:20:02
【问题描述】:

这可能是一个简单的问题,但我无法解决。

我有一个网址:"www.example.com/links"

我想在 url 之间添加/skip_session/id=%s/ 使其变为:

www.example.com/skip_session/id=%s/links

有人可以帮我吗?

我尝试过使用

url[23:]+ "/skip_session/id=%s/" + url[:52]

但它给出了一个错误

【问题讨论】:

  • 您自己尝试过吗?你遇到了什么问题?
  • @theflash 我确定错误是索引超出范围,因为没有附加字符串的 url 本身只有 20 个字符长,而您正在执行url[23:]
  • @thiruvenkadam 抱歉,这只是一个展示的虚拟示例。我正在使用其他一些 url,它有 23 个字符。
  • 以后,请edit您的问题添加所需的详细信息;我将您的评论移至问题中。但是,您没有包括您遇到的错误。有关 URL 的任何详细信息(它们是否缺少方案部分,所以 http://,路径如何变化,其中任何一个是否具有 :80 端口部分或 username:password@ 身份验证等?)也会有所帮助。
  • @theflash 那么你不应该这样做url[:23]+"/skip_session/id=%s/"+url[24:]吗?

标签: python string url


【解决方案1】:

由于您想在 URL 的路径部分添加 前缀 字符串,您可以使用 urllib.parse module (Python 2 中的 urlparse)首先将 URL 分成几部分:

try:
    # Python 3
    from urllib.parse import urlparse
except ImportError:
    # Python 2
    from urlparse import urlparse

def insert_path_prefix(url, prefix):
    parts = urlparse(url)
    updated = parts._replace(path=prefix + parts.path)
    return updated.geturl()

url = insert_path_prefix(url, '/skip_session/id=%s')

考虑到这确实要求您的 URL 格式正确(至少以 // 开头,最好使用完整格式的方案,如 http://),以便解析正确选择主机名:

>>> insert_path_prefix('http://www.example.com/links', '/skip_session/id=%s')
'http://www.example.com/skip_session/id=%s/links'

如果您的网址开头缺少// 部分,请先添加一个。

【讨论】:

    【解决方案2】:

    您可以使用字符串替换或字符串 rsplit 来完成任务

    url_string = "www.example.com/links"
    parsed_url = url_string.rsplit("/", 1)
    new_url = "/skip_session/id=%s/".join(parsed_url)
    

    或者这个:

    url_string = "www.example.com/links"
    new_url = url_string.replace("/links", "/skip_session/id=%s/links")
    

    【讨论】:

    • 再次假设 URL 中只有一个这样的斜线。
    • 我的观点是 OP 希望在 API 的最后部分之前添加字符串,而不是作为前缀 :-) 就像有 example.com/a/b/d 并需要将其转换为 example.com/a/b/c/d
    • 这远非确定;我已提示 OP 为问题添加更多细节。
    • 无论如何,将 URL 视为 URL,就像您的答案一样,并且操作比字符串解析要好得多。这个答案将在非常简单的用例方面进行一些快速而肮脏的字符串操作。(阅读:对于不太关心操作的单行)
    猜你喜欢
    • 2022-11-12
    • 2013-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 2016-10-08
    • 2017-04-15
    • 1970-01-01
    相关资源
    最近更新 更多