Python Найти вопрос - PullRequest
       20

Python Найти вопрос

2 голосов
/ 23 октября 2008

Я использую Python для извлечения имени файла из ссылки, используя rfind, как показано ниже:

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

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

Это работает нормально со ссылками без / в конце и возвращает «test.php». Я столкнулся со ссылками с / в конце, например, так: "http://www.google.com/test.php/". У меня проблемы с получением имени страницы, когда в конце есть" / ", кто-нибудь может помочь?

Приветствия

Ответы [ 7 ]

9 голосов
/ 23 октября 2008

Простое удаление косой черты в конце не будет работать, так как вы, вероятно, можете получить 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:]
4 голосов
/ 23 октября 2008

Используйте полосу [r] для удаления косых черт:

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

Если возможен более широкий диапазон возможных URL-адресов, включая URL-адреса с запросами?, #Anchors или без пути, сделайте это правильно с помощью urlparse:

path= urlparse.urlparse(url).path
return path.rstrip('/').rsplit('/', 1)[-1] or '(root path)'
1 голос
/ 23 октября 2008

Имена файлов с косой чертой в конце являются технически неподвижными определениями пути и указывают, что индексный файл должен быть прочитан. Если у вас есть тот, который заканчивается на test.php/, я бы посчитал это ошибкой. В любом случае вы можете удалить / с конца перед запуском кода следующим образом:

url = url.rstrip('/')
0 голосов
/ 23 октября 2008
filter(None, url.split('/'))[-1]

(Но urlparse, вероятно, более читабелен, даже если более подробный.)

0 голосов
/ 23 октября 2008

Просто для удовольствия, вы можете использовать регулярное выражение:

import re
print re.search('/([^/]+)/?$', url).group(1)
0 голосов
/ 23 октября 2008

Существует библиотека с именем urlparse , которая будет анализировать URL-адрес для вас, но по-прежнему не удаляет / в конце, поэтому один из приведенных выше вариантов будет лучшим

0 голосов
/ 23 октября 2008

Вы можете использовать

print url[url.rstrip("/").rfind("/") +1 : ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...