如何获取URL中最后一个斜杠之后的所有内容?


110

如何提取Python中URL中最后一个斜杠之后的内容?例如,这些URL应该返回以下内容:

URL: http://www.test.com/TEST1
returns: TEST1

URL: http://www.test.com/page/TEST2
returns: TEST2

URL: http://www.test.com/page/page/12345
returns: 12345

我已经尝试过urlparse,但这给了我完整的路径文件名,例如page/page/12345


1
如果网址中可能包含类似的查询字符串,...?foo=bar而您不希望这样做;我建议urlparse与naeg的建议结合使用basename
plundra

Answers:


243

您不需要花哨的东西,只需在标准库中查看字符串方法,就可以轻松地在“ filename”部分和其余部分之间拆分url:

url.rsplit('/', 1)

因此,您可以简单地通过以下方式获得您感兴趣的部分:

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

10
url.rsplit('/', 1)返回列表,url.rsplit('/', 1)[-1]是最后一个斜杠之后的位。
雨果

5
另一种方法是:url.rsplit('/',1).pop()
Alex Fortin

警告:此基本技巧完全破坏了网址,例如http://www.example.com/foo/?entry=the/bar#another/bar。但是,rsplit如果您绝对确定查询或片段参数中绝不会出现任何斜杠,则可以进行基本的解析。但是,我不禁要思考实际上有多少代码库包含此rsplit代码及其与查询处理相关的错误。想要绝对的安全性和可靠性的人应该使用urllib.parse()!然后,您可以使用path它返回的值并对THAT进行分割,以确保仅分割路径。
米奇·麦克马伯斯

代码:如何实现更好方法的示例: from urllib.parse import urlparse; p = urlparse("http://www.example.com/foo.htm?entry=the/bar#another/bar"); print(p.path.rsplit("/", 1)[-1])结果:foo.htm
Mitch McMabers



10

您可以这样:

head, tail = os.path.split(url)

其中tail是您的文件名。


6

如果需要,可以使用urlparse(例如,摆脱任何查询字符串参数)。

import urllib.parse

urls = [
    'http://www.test.com/TEST1',
    'http://www.test.com/page/TEST2',
    'http://www.test.com/page/page/12345',
    'http://www.test.com/page/page/12345?abc=123'
]

for i in urls:
    url_parts = urllib.parse.urlparse(i)
    path_parts = url_parts[2].rpartition('/')
    print('URL: {}\nreturns: {}\n'.format(i, path_parts[2]))

输出:

URL: http://www.test.com/TEST1
returns: TEST1

URL: http://www.test.com/page/TEST2
returns: TEST2

URL: http://www.test.com/page/page/12345
returns: 12345

URL: http://www.test.com/page/page/12345?abc=123
returns: 12345

5
os.path.basename(os.path.normpath('/folderA/folderB/folderC/folderD/'))
>>> folderD

这也有效:from pathlib import Path print(f"Path(redirected_response.url).stem: {Path(redirected_response.url).stem!r}")
Alex Glukhovtsev



0

partition并且rpartition对于此类事情也很方便:

url.rpartition('/')[2]


-1
url ='http://www.test.com/page/TEST2'.split('/')[4]
print url

输出:TEST2


2
您确实应该通过-1作为索引,否则,它仅适用于具有那么多字符串的字符串/
Chris_Rands
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.