2

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

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

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

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

干杯

4

7 回答 7

9

仅删除末尾的斜杠是行不通的,因为您可能有一个如下所示的 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:]
于 2008-10-23T11:32:46.660 回答
4

使用 [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)'
于 2008-10-23T11:42:52.613 回答
1

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

url = url.rstrip('/')
于 2008-10-23T11:31:12.917 回答
0

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

于 2008-10-23T11:32:14.197 回答
0

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

import re
print re.search('/([^/]+)/?$', url).group(1)
于 2008-10-23T11:38:13.170 回答
-1

你可以使用

print url[url.rstrip("/").rfind("/") +1 : ]
于 2008-10-23T11:28:54.670 回答
-1
filter(None, url.split('/'))[-1]

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

于 2008-10-23T13:10:34.840 回答