Jak używamy urljoinz parametrami 3 lub trybami lub którą bibliotekę polecacie do tego?
Mesut Tasci
@mesuutt spróbuj utworzyć pętlę i połączyć każdą część z wcześniej dołączonym adresem URL.
Cédric Julien
2
@ CédricJulien: prosta pętla nie zadziała, ponieważ każda ścieżka z /początkiem spowoduje „zresetowanie” i powrót schematu + netloc + lasturl:urlparse.urljoin('http://www.a.com/b/c/d', '/e') => 'http://www.a.com/e'
MestreLion
Jeśli używasz urljoin, występuje problem. Na przykład urljoin('http://www.a.com/', '../../b/c.png')wynik to 'http://www.a.com/../../b/c.png', ale nie http://www.a.com/b/c.png. Czy jest więc jakaś metoda http://www.a.com/b/c.png?
bigwind
1
Link do punktów Python 3 do dokumentacji Python dokumentacji 2, musi ona aktualizowana w odpowiedzi, to docs.python.org/3.6/library/...
Harsh
8
Jeśli twoja ścieżka względna składa się z wielu części, musisz połączyć je oddzielnie, ponieważ urljoinzastąpiłoby to ścieżkę względną, a nie dołączyło do niej. Najłatwiej to zrobić, używając posixpath.
Dobry sposób na obsługę listy wartości. Możesz jednak usunąć efekt uboczny (zmienną „bazową”), używając redukcji. reduce(lambda a, b: urlparse.urljoin(a, b), es) Mapa to list[n] - to -> list[n]Redukcja tolist[n] - to -> a calculated value
Zauważ, że w tej metodzie każdy fragment powinien mieć końcowy ukośnik, bez poprzedzającego ukośnika (aby wskazać, że jest to łączony fragment ścieżki). Jest to bardziej poprawne / pouczające, mówiąc ci, że path1/jest to fragment ścieżki URI, a nie pełna ścieżka /path1/lub nieznana path1, która może być albo (i jest traktowana jako pełna ścieżka).
Jeśli chcesz dodać /do brakującego fragmentu, możesz zrobić:
uri = uri if uri.endswith("/")else f"{uri}/"
Aby dowiedzieć się więcej o rozdzielczości URI, Wikipedia ma kilka fajnych przykładów.
aktualizacja
Tylko zauważa, że Peter Perron skomentował redukcję odpowiedzi Shikhara, ale zostawię to tutaj, aby pokazać, jak to się robi.
Odpowiedzi:
Powinieneś użyć urlparse.urljoin :
W Pythonie 3 (gdzie urlparse została zmieniona na urllib.parse ) możesz go użyć w następujący sposób :
źródło
urljoin
z parametrami 3 lub trybami lub którą bibliotekę polecacie do tego?/
początkiem spowoduje „zresetowanie” i powrót schematu + netloc + lasturl:urlparse.urljoin('http://www.a.com/b/c/d', '/e') => 'http://www.a.com/e'
urljoin('http://www.a.com/', '../../b/c.png')
wynik to'http://www.a.com/../../b/c.png'
, ale niehttp://www.a.com/b/c.png
. Czy jest więc jakaś metodahttp://www.a.com/b/c.png
?Jeśli twoja ścieżka względna składa się z wielu części, musisz połączyć je oddzielnie, ponieważ
urljoin
zastąpiłoby to ścieżkę względną, a nie dołączyło do niej. Najłatwiej to zrobić, używającposixpath
.Zobacz także: Jak łączyć składniki ścieżki podczas tworzenia adresu URL w Pythonie
źródło
źródło
reduce(lambda a, b: urlparse.urljoin(a, b), es)
Mapa tolist[n] - to -> list[n]
Redukcja tolist[n] - to -> a calculated value
Prosty.
źródło
W przypadku Pythona 3.0+ prawidłowym sposobem dołączania adresów URL jest:
źródło
Możesz użyć,
reduce
aby osiągnąć metodę Shikhara w czystszy sposób.Zauważ, że w tej metodzie każdy fragment powinien mieć końcowy ukośnik, bez poprzedzającego ukośnika (aby wskazać, że jest to łączony fragment ścieżki). Jest to bardziej poprawne / pouczające, mówiąc ci, że
path1/
jest to fragment ścieżki URI, a nie pełna ścieżka/path1/
lub nieznanapath1
, która może być albo (i jest traktowana jako pełna ścieżka).Jeśli chcesz dodać
/
do brakującego fragmentu, możesz zrobić:Aby dowiedzieć się więcej o rozdzielczości URI, Wikipedia ma kilka fajnych przykładów.
aktualizacja
Tylko zauważa, że Peter Perron skomentował redukcję odpowiedzi Shikhara, ale zostawię to tutaj, aby pokazać, jak to się robi.
źródło