我正在使用 Python 从使用 rfind 的链接中提取文件名,如下所示:
url = "http://www.google.com/test.php"
print url[url.rfind("/") +1 : ]
这适用于结尾没有 / 的链接并返回“test.php”。我在末尾遇到了带有 / 的链接,例如“ http://www.google.com/test.php/ ”。当末尾有“/”时,我无法获取页面名称,有人可以帮忙吗?
干杯
我正在使用 Python 从使用 rfind 的链接中提取文件名,如下所示:
url = "http://www.google.com/test.php"
print url[url.rfind("/") +1 : ]
这适用于结尾没有 / 的链接并返回“test.php”。我在末尾遇到了带有 / 的链接,例如“ http://www.google.com/test.php/ ”。当末尾有“/”时,我无法获取页面名称,有人可以帮忙吗?
干杯
仅删除末尾的斜杠是行不通的,因为您可能有一个如下所示的 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:]
使用 [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)'
末尾带有斜杠的文件名在技术上仍然是路径定义,表示要读取索引文件。如果您实际上有一个以 结尾的test.php/
,我会认为这是一个错误。在任何情况下,您都可以在运行代码之前从末尾删除 /,如下所示:
url = url.rstrip('/')
有一个名为urlparse的库可以为您解析 url,但仍然不会删除末尾的 / 所以上述之一将是最好的选择
只是为了好玩,您可以使用正则表达式:
import re
print re.search('/([^/]+)/?$', url).group(1)
你可以使用
print url[url.rstrip("/").rfind("/") +1 : ]
filter(None, url.split('/'))[-1]
(但 urlparse 可能更具可读性,即使更冗长。)