【问题标题】:Splitting a url into a list in python在python中将url拆分为列表
【发布时间】:2011-10-03 21:46:24
【问题描述】:

我目前正在从事一个涉及拆分 url 的项目。我使用了 urlparse 模块来分解 url,所以现在我只使用路径段。

问题是,当我尝试根据分隔符“/”拆分()字符串以分隔目录时,我的列表中出现空字符串。

例如,当我执行以下操作时:

import urlparse
url = "http://example/url/being/used/to/show/problem"
parsed = urlparse.urlparse(url)
path = parsed[2] #this is the path element

pathlist = path.split("/")

我得到了清单:

['', 'url', 'being', 'used', 'to', 'show', 'problem']

我不想要这些空字符串。我意识到我可以通过创建一个没有它们的新列表来删除它们,但这似乎很草率。有没有更好的方法来删除空字符串和斜杠?

【问题讨论】:

    标签: python urlparse urlsplit


    【解决方案1】:

    我不想要这些空字符串。我意识到我可以通过创建一个没有它们的新列表来删除它们,但这似乎很草率。有没有更好的方法来删除空字符串和斜杠?

    什么?只有一个空字符串,根据定义,它总是第一个。

    pathlist = path.split("/")[1:] 
    

    很常见。


    结尾的斜杠可以表示“空”文件名。在这种情况下,可能会隐含默认名称(例如 index.html)

    这可能是有意义的。

    "http://example/url/being/used/to/show/problem"
    

    文件名是“问题”

    "http://example/url/being/used/to/show/problem/"
    

    目录是“问题”,空字符串隐含默认文件名。

    【讨论】:

    • 如果url结尾有斜线,还有一个空字符串。
    • 那么也许使用列表组合? path_list = [(p) for p in path.split('/') if len(p)]
    • @craigs:这不是任意的。这只是第一个位置。最后一个位置可能是有意义的。简单地抑制路径元素是错误的。
    • @S.Lott:我完全同意您的原始回复,并且确实了解尾部斜杠对于大多数 Web 服务器的重要性;但我后来回复了@chindes 的回复,该回复表明他们希望在拆分中抑制 all 空字符串。那么......决定是否抑制尾随'/'的唯一安全方法是实际发出HEAD请求并检查重定向吗? p.s. 'I almost wet myself' 当我收到 S.Lott 的回复时。
    • @craigs:“他们想抑制拆分中的所有空字符串”是一个非常糟糕的主意。这是一个有吸引力的麻烦。
    【解决方案2】:

    我不熟悉 urllib 及其路径输出,但我认为形成新列表的一种方法可以通过以下方式使用列表理解:

    [x for x in path.split("/") if x]
    

    如果只有前导'/'或者类似的东西:

    path.lstrip('/').split("/")
    

    如果也拖尾,则否则:

    path.strip('/').split("/")
    

    至少如果路径中的字符串总是从单个 '/' 开始,那么最简单的方法是:

    path[1:].split('/')
    

    【讨论】:

      【解决方案3】:
      pathlist = paths.strip('/').split("/")
      

      【讨论】:

        【解决方案4】:

        删除空项?

        pathlist.remove('')
        

        【讨论】:

          【解决方案5】:

          我将此作为评论添加到评论中,以防万一: 您不能使用列表推导来排除从拆分返回的空元素,即

          path_list = [(p) for p in path.split('/') if len(p)]
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-06-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-03-10
            • 2018-08-25
            相关资源
            最近更新 更多