Python查找问题

2 投票
7 回答
1756 浏览
提问于 2025-04-11 09:27

我正在使用Python来从链接中提取文件名,使用的是rfind方法,代码如下:

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

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

这个方法在没有斜杠(/)结尾的链接上效果不错,可以返回“test.php”。但是我遇到了一些链接,像这样以斜杠结尾:“http://www.google.com/test.php/”。当链接末尾有斜杠时,我就无法正确获取页面名称了,有谁能帮帮我吗?

谢谢

7 个回答

1

文件名如果最后有一个斜杠(/),从技术上讲,它仍然是一个路径的定义,表示要读取索引文件。如果你真的有一个文件名是以 test.php/ 结尾的,我会认为这是一个错误。无论如何,在运行你的代码之前,你可以把最后的斜杠去掉,方法如下:

url = url.rstrip('/')
4

使用[r]strip可以去掉字符串末尾的斜杠:

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

如果你需要处理更多种类的URL,比如包含问号的查询、井号的锚点,或者没有路径的情况,最好使用urlparse来处理:

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

光是把最后的斜杠去掉是没用的,因为你可能会遇到这样的链接:

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:]

撰写回答