【问题标题】:Python Find QuestionPython 查找问题
【发布时间】:2010-09-18 18:21:43
【问题描述】:

我正在使用 Python 从使用 rfind 的链接中提取文件名,如下所示:

url = "http://www.google.com/test.php"

print url[url.rfind("/") +1 : ]

这适用于结尾没有 / 的链接并返回“test.php”。我在末尾遇到了带有 / 的链接,例如“http://www.google.com/test.php/”。当末尾有“/”时,我无法获取页面名称,有人可以帮忙吗?

干杯

【问题讨论】:

    标签: python url


    【解决方案1】:

    为了好玩,您可以使用正则表达式:

    import re
    print re.search('/([^/]+)/?$', url).group(1)
    

    【讨论】:

    • Python 不是 Perl,您不必总是使用正则表达式!对于简单的处理,内置的字符串方法可能更具可读性和更快。 (在这种情况下,在我的机器上,正则表达式慢了 60%,如果没有预编译,则慢 160%。这对这样简单的代码可能并不重要,但仍然)
    • 我知道。我也支持 urlparse 建议。由于没有人提出正则表达式,我想我会提到这种可能性。
    【解决方案2】:
    filter(None, url.split('/'))[-1]
    

    (但 urlparse 可能更具可读性,即使更冗长。)

    【讨论】:

      【解决方案3】:

      使用 [r]strip 删除尾部斜杠:

      url.rstrip('/').rsplit('/', 1)[-1]
      

      如果可能的 URL 范围更广,包括带有 ?queries、#anchors 或没有路径的 URL,请使用 urlparse 正确处理:

      path= urlparse.urlparse(url).path
      return path.rstrip('/').rsplit('/', 1)[-1] or '(root path)'
      

      【讨论】:

        【解决方案4】:

        仅删除末尾的斜杠是行不通的,因为您可能有一个如下所示的 URL:

        http://www.google.com/test.php?filepath=tests/hey.xml
        

        ...在这种情况下,您将返回“hey.xml”。您可以使用 urlparse 摆脱参数,而不是手动检查,然后执行其他人建议的检查:

        from urlparse import urlparse
        url = "http://www.google.com/test.php?something=heyharr/sir/a.txt"
        f = urlparse(url)[2].rstrip("/")
        print f[f.rfind("/")+1:]
        

        【讨论】:

          【解决方案5】:

          有一个名为 urlparse 的库会为您解析 url,但仍然不会删除末尾的 /,因此上述之一将是最佳选择

          【讨论】:

            【解决方案6】:

            末尾带有斜线的文件名在技术上仍然是路径定义,表示要读取索引文件。如果你真的有一个以test.php/ 结尾的,我会认为这是一个错误。在任何情况下,您都可以在运行代码之前从末尾删除 /,如下所示:

            url = url.rstrip('/')
            

            【讨论】:

            【解决方案7】:

            你可以使用

            print url[url.rstrip("/").rfind("/") +1 : ]
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2011-02-14
              • 2020-11-29
              • 2014-07-13
              • 2011-08-31
              • 2016-11-17
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多