Как мы используем urljoinс 3 или параметрами режима или какую библиотеку вы порекомендуете для этого?
Месут Таши
@mesuutt пытается создать цикл и соединить каждую часть с ранее присоединенным URL.
Cédric Julien
2
@ CédricJulien: простой цикл не будет работать, так как любой путь с ведущим /будет "сброшен" и вернет схему + netloc + lasturl:urlparse.urljoin('http://www.a.com/b/c/d', '/e') => 'http://www.a.com/e'
MestreLion
При использовании urljoin возникает проблема. Например, urljoin('http://www.a.com/', '../../b/c.png')результат есть 'http://www.a.com/../../b/c.png', но нет http://www.a.com/b/c.png. Итак, есть ли способ получить http://www.a.com/b/c.png?
bigwind 02
1
Ссылка на документацию Python 3 указывает на документацию Python 2, ее необходимо обновить в ответе, это docs.python.org/3.6/library/…
Harsh
8
Если ваш относительный путь состоит из нескольких частей, вы должны соединить их по отдельности, так urljoinкак относительный путь будет заменен, а не присоединен к нему. Самый простой способ сделать это - использовать posixpath.
Хороший способ поддержать список ценностей. Вы можете удалить свой побочный эффект (вашу «базовую» переменную), используя сокращение. reduce(lambda a, b: urlparse.urljoin(a, b), es) Карта - list[n] - to -> list[n]это сокращениеlist[n] - to -> a calculated value
Обратите внимание, что при использовании этого метода каждый фрагмент должен иметь завершающую косую черту без ведущей косой черты (чтобы указать, что это присоединяемый фрагмент пути). Это более правильно / информативно, говоря вам, что path1/это фрагмент пути URI, а не полный путь /path1/или неизвестный path1, который может быть любым (и обрабатывается как полный путь).
Если вам нужно добавить /фрагмент, которого нет, вы можете сделать:
uri = uri if uri.endswith("/")else f"{uri}/"
Чтобы узнать больше о разрешении URI, в Википедии есть несколько хороших примеров.
Обновить
Просто замечает, что Питер Перрон прокомментировал сокращение ответа Шихара, но я оставлю это здесь, чтобы продемонстрировать, как это делается.
Ответы:
Вы должны использовать urlparse.urljoin :
С Python 3 (где urlparse переименован в urllib.parse ) вы можете использовать его следующим образом :
источник
urljoin
с 3 или параметрами режима или какую библиотеку вы порекомендуете для этого?/
будет "сброшен" и вернет схему + 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')
результат есть'http://www.a.com/../../b/c.png'
, но нетhttp://www.a.com/b/c.png
. Итак, есть ли способ получитьhttp://www.a.com/b/c.png
?Если ваш относительный путь состоит из нескольких частей, вы должны соединить их по отдельности, так
urljoin
как относительный путь будет заменен, а не присоединен к нему. Самый простой способ сделать это - использоватьposixpath
.См. Также: Как объединить компоненты пути при создании URL-адреса в Python
источник
источник
reduce(lambda a, b: urlparse.urljoin(a, b), es)
Карта -list[n] - to -> list[n]
это сокращениеlist[n] - to -> a calculated value
Просто.
источник
Для python 3.0+ правильный способ присоединения URL-адресов:
источник
Вы можете использовать
reduce
метод Шихара более чистым способом.Обратите внимание, что при использовании этого метода каждый фрагмент должен иметь завершающую косую черту без ведущей косой черты (чтобы указать, что это присоединяемый фрагмент пути). Это более правильно / информативно, говоря вам, что
path1/
это фрагмент пути URI, а не полный путь/path1/
или неизвестныйpath1
, который может быть любым (и обрабатывается как полный путь).Если вам нужно добавить
/
фрагмент, которого нет, вы можете сделать:Чтобы узнать больше о разрешении URI, в Википедии есть несколько хороших примеров.
Обновить
Просто замечает, что Питер Перрон прокомментировал сокращение ответа Шихара, но я оставлю это здесь, чтобы продемонстрировать, как это делается.
источник