Jak mogę wyodrębnić wszystko, co następuje po ostatnim ukośniku w adresie URL w Pythonie? Na przykład te adresy URL powinny zwracać:
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
Próbowałem urlparse, ale to daje mi pełną nazwę pliku ścieżki, na przykład page/page/12345
.
...?foo=bar
i nie chcesz tego; Sugerowałbym użycieurlparse
w połączeniu z sugestiąbasename
Naeg.Odpowiedzi:
Nie potrzebujesz wymyślnych rzeczy, po prostu zobacz metody ciągów w standardowej bibliotece i możesz łatwo podzielić swój adres URL między część „nazwa pliku” a resztę:
Aby uzyskać interesującą Cię część, po prostu:
źródło
url.rsplit('/', 1)
zwraca listę iurl.rsplit('/', 1)[-1]
jest bitem po ostatnim ukośniku.http://www.example.com/foo/?entry=the/bar#another/bar
. Ale podstawowe parsowanie, takie jak,rsplit
jest w porządku, jeśli masz absolutną pewność, że nigdy nie będzie żadnych ukośników w zapytaniu lub parametrach fragmentów. Wzdrygam się jednak na myśl o tym, ile baz kodu faktycznie zawiera tenrsplit
kod i związany z nim błąd w obsłudze zapytań. Osoby, które chcą ABSOLUTNEGO BEZPIECZEŃSTWA I NIEZAWODNOŚCI, powinnyurllib.parse()
zamiast tego używać ! Następnie możesz użyćpath
zwracanej wartości i podzielić TO, aby mieć pewność, że podzieliłeś TYLKO ścieżkę.from urllib.parse import urlparse; p = urlparse("http://www.example.com/foo.htm?entry=the/bar#another/bar"); print(p.path.rsplit("/", 1)[-1])
Wynik:foo.htm
Jeszcze jeden (idio (ma) tic) sposób:
źródło
rsplit
.rsplit
powinien sprostać zadaniu:źródło
Możesz zrobić tak:
Gdzie tail będzie nazwą twojego pliku.
źródło
urlparse jest w porządku w użyciu, jeśli chcesz (powiedzmy, aby pozbyć się parametrów ciągu zapytania).
Wynik:
źródło
źródło
from pathlib import Path print(f"Path(redirected_response.url).stem: {Path(redirected_response.url).stem!r}")
Oto bardziej ogólny, regexowy sposób na zrobienie tego:
źródło
źródło
from string import rfind
odpowiedzipartition
irpartition
są również przydatne do takich rzeczy:źródło
Podziel adres URL i wstaw ostatni element
url.split('/').pop()
źródło
Wyjście:
TEST2
.źródło
-1
/